我已经创建了计算字母表中每个字符的方法。我正在学习流(函数式编程)并尝试尽可能多地使用它们,但在这种情况下我不知道该怎么做:
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 的流重写它呢?
原文由 Letfar 发布,翻译遵循 CC BY-SA 4.0 许可协议
避免有状态的索引计数器,例如其他答案中提供的基于
AtomicInteger
的解决方案。如果流是并行的,它们将失败。相反,流过索引:上面假设传入列表不应该有重复的字符,因为它是一个字母表。如果您有重复元素的可能性,那么多个元素将映射到相同的键,然后您需要指定 合并功能。例如,您可以使用
(a,b) -> b
或(a,b) ->a
作为toMap
方法的第三个参数。