如何使用流-Java 8将List转换为带有索引的Map?
我创建了一种计算字母数字的方法。我正在学习流(函数式编程)并尝试尽可能多地使用它们,但是在这种情况下,我不知道该怎么做:
private Map<Character, Integer> numerateAlphabet(List<Character> alphabet) { Map<Character, Integer> m = new HashMap<>();
for (int i = 0; i < alphabet.size(); i++)
m.put(alphabet.get(i), i);
return m;
}
那么,如何使用Java 8流重写它呢?
回答:
避免使用有状态的索引计数器,如AtomicInteger
其他答案中所述的基于-解决方案。如果流是并行的,它们将失败。相反,流式传输索引:
IntStream.range(0, alphabet.size()) .boxed()
.collect(toMap(alphabet::get, i -> i));
上面假设传入列表是字母,因此不应包含重复的字符。如果您有可能重复元素,则多个元素将映射到同一键,然后需要指定合并功能。例如,您可以使用(a,b)
-> b或(a,b) ->a
作为toMap
方法的第三个参数。
以上是 如何使用流-Java 8将List转换为带有索引的Map? 的全部内容, 来源链接: utcz.com/qa/409911.html