我已经创建了一种计算字母表中每个字符的方法。我正在学习流(函数式编程),并尝试尽可能经常地使用它们,但我不知道在这种情况下该怎么做:
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;
}
避免像其他答案中提供的基于AtomicInteger
的解决方案那样的有状态索引计数器。如果流是并行的,它们就会失败。而是通过索引进行流式传输:
IntStream.range(0, alphabet.size())
.boxed()
.collect(toMap(alphabet::get, i -> i));
上面假设传入的列表不应该有重复的字符,因为它是一个字母表。如果有可能出现重复的元素,那么多个元素将映射到同一个键,然后需要指定合并函数。例如,您可以使用(a,b)->b
或(a,b)->a
作为Tomap
方法的第三个参数。
我正在尝试学习如何使用Java 8的集合,我想知道是否有一种方法将我的列表转换成一个地图使用Java流。 我想知道如何使用流将上面的列表创建到一个映射中。我知道如何将foreach etc与puts一起使用,但我只是想知道是否有更优雅的方法使用流构建映射。(我知道下面的语法不正确,我是流的新手,不知道怎么写) 目标是代表以下内容。
我正在查看的文档,我看到了方法,但无法直接转到 是否有方法将转换为?
我想把列表转换成地图使用作为关键值只有两个字符串值。然后作为值,从输入列表中只列出包含奇数或偶数索引位置的元素的字符串列表。以下是旧的时尚代码: 如何使用流将此代码转换为Java8以获得此结果? 我目前的混乱尝试需要修改列表的元素,但肯定是更好的选择。 或者也许有人帮我解决这个不正确的问题? 返回以下内容:
我的索引: 我必须将此格式转换为以下格式的列表:
我有一个问题与转换列表对象映射字符串,列表对象。我正在寻找与一个关键名称的汽车所有组件的地图,一个值由汽车与此组件表示 我写了一个解决方案,但寻找一个更好的流解决方案。