gpt4 book ai didi

java - 我们如何避免嵌套的 Collection.stream() 调用?

转载 作者:行者123 更新时间:2023-12-01 18:23:17 26 4
gpt4 key购买 nike

假设我们有以下 map

Map<String, List<String>> peopleByCity = new TreeMap<>();

包含以下内容:

{ "London" : [ "Steve", "John"],
"Paris" : [ "Thierry" ],
"Sofia" : [ "Peter", "Konstantin", "Ivan"] }

使用 Stream API 工具,对于 [City ; 类型的每个 Person],我想应用一些操作,比如说打印:

 London : Steve
London : John
Paris : Thierry
Sofia : Peter
Sofia : Konstantin
Sofia : Ivan

一个可能的(但不是很简洁)的解决方案是:

peopleByCity.entrySet()
.stream()
.forEach( entry -> {
String city = entry.getKey();
entry.getValue().
.stream() <-- the nested Collection.stream() call
.forEach(
person -> System.out.println(city + ";" + person));
});

如何避免对 Collection.stream() 的嵌套调用通过创建一些对其他流/收集器功能的调用链?

最佳答案

一种方法是“flatMap”列表:

peopleByCity.entrySet().stream()
.flatMap(e -> e.getValue().stream().map(p -> e.getKey() + ";" + p))
.forEach(System.out::println);

另一种方法是使用两个 forEach:

peopleByCity.forEach((city, people) -> 
people.forEach(person -> System.out.println(city + ";" + person)));

但最终我认为没有一种简单的方法可以流式传输列表,除非您编写自定义收集器(但嵌套流将位于收集器中)。

关于java - 我们如何避免嵌套的 Collection.stream() 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27042243/

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