迭代一个集合然后只有一次执行流concat集合的所有元素

时间:2018-05-09 10:56:27

标签: java dynamic collections java-stream concat

我有HashMap<String, List<User>>
我想要返回一个allList合并形式Hashmap的所有List<User>
并且只有一次触发语句Stream.concat(list1, Stream.concat(list2, Stream.concat(list3,Stream.concat(list4,...))))...
我的目标是更高的性能。

2 个答案:

答案 0 :(得分:2)

如果您想要所有List<User>的所有元素的单个Stream,则应使用flatMap,而不是Stream.concat

Stream<User> users = map.values().stream().flatMap(List::stream);

然后,您可以对Stream进行任何处理。例如,创建所有List的{​​{1}}:

User

答案 1 :(得分:0)

是的,您可以对concat所有用户列表执行折叠操作,但这样做太过分了,所以请改用其他答案中建议的方法,或者只是:

List<User> accumulator = new ArrayList<>();
for (List<User> l : map.values()) 
     accumulator.addAll(l);