[英]How can we avoid nested Collection.stream() calls?
假設我們有以下Map
Map<String, List<String>> peopleByCity = new TreeMap<>();
具有以下內容:
{ "London" : [ "Steve", "John"],
"Paris" : [ "Thierry" ],
"Sofia" : [ "Peter", "Konstantin", "Ivan"] }
與該流API的工具,對於每對類型的[City ; Person]
[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));
});
我們如何通過創建對其他Stream / Collector功能的調用鏈來避免對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)));
但最后,除非您編寫自定義收集器(否則嵌套的流將在收集器中),否則我認為繞列表沒有簡單的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.