gpt4 book ai didi

java - java8流图在这里做什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:59:53 25 4
gpt4 key购买 nike

我对 java8 流中 map()forEach() 方法的区别感到困惑。例如,

List<String> strings = Lists.newArrayList("1", "2");
Map<String, String> map = Maps.newHashMap();
strings.stream().map(s->map.put(s, s));
System.out.println(map);

我在这里得到空输出,但是如果我将 map 更改为 forEach() 就像

List<String> strings = Lists.newArrayList("1", "2");
Map<String, String> map = Maps.newHashMap();
strings.stream().forEach(s->map.put(s, s));
System.out.println(map);

我可以得到

{1=1, 2=2}

为什么它没有运行 map() 方法?它们有什么区别?

最佳答案

strings.stream().map(s->map.put(s, s));

什么都不做,因为在您执行终端操作之前不会处理流管道。因此 Map 仍然是空的。

向流管道添加终端操作将导致map.put(s, s) 为终端操作所需的Stream 的每个元素执行(一些终端操作只需要一个元素,而另一些则需要 Stream 的所有元素)。

另一方面,第二个流管道:

strings.stream().forEach(s->map.put(s, s));

以终端操作结束 - forEach - 它针对 Stream 的每个元素执行。

也就是说,这两个片段都在滥用 Stream。为了根据 Stream 的内容填充 CollectionMap,您应该使用 collect(),它可以创建一个 Map 或一个 Collection 并根据需要填充它。 forEachmap 有不同的用途。

例如,要创建一个 map :

List<String> strings = Lists.newArrayList("1", "2");
Map<String, String> map = strings.stream()
.collect(Collectors.toMap(Function.identity(),
Function.identity()));
System.out.println(map);

关于java - java8流图在这里做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45562286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com