【发布时间】:2017-02-14 14:20:03
【问题描述】:
如何习惯性地枚举Stream<T>,它将每个T 实例映射到使用Java 8 流方法的唯一整数(例如,对于数组T[] values,创建一个Map<T,Integer>,其中Map.get(values[i]) == i 的计算结果为@987654326 @)?
目前,我正在定义一个匿名类,它增加一个 int 字段以用于 Collectors.toMap(..) 方法:
private static <T> Map<T, Integer> createIdMap(final Stream<T> values) {
return values.collect(Collectors.toMap(Function.identity(), new Function<T, Integer>() {
private int nextId = 0;
@Override
public Integer apply(final T t) {
return nextId++;
}
}));
}
但是,使用 Java 8 流 API 是否有更简洁/优雅的方式来执行此操作? — 如果可以安全并行化,则加分。
【问题讨论】:
-
values流中的所有值都是唯一的吗? -
在我的具体情况下是的,但是看到一个可以处理对象多次出现的解决方案也会很有趣。
-
@SME_Dev 绝对没有。
标签: java java-8 java-stream enumeration