Выполните итерацию коллекции, затем только один раз выполните поток, объединяющий все элементы коллекции. - PullRequest
0 голосов
/ 09 мая 2018

У меня есть HashMap<String, List<User>>
Я хочу вернуть форму слияния всех списков всех List<User> Hashmap.
И только с одним оператором триггера Stream.concat(list1, Stream.concat(list2, Stream.concat(list3,Stream.concat(list4,...))))...
Моя цель - более высокая производительность.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Да, вы можете выполнить операцию сгиба для concat всего списка пользователей, но это перебор, поэтому вместо этого используйте подход, предложенный в другом ответе, или просто:

List<User> accumulator = new ArrayList<>();
for (List<User> l : map.values()) 
     accumulator.addAll(l);
0 голосов
/ 09 мая 2018

Если вам нужен один поток из всех элементов всех List<User> s, вы должны использовать flatMap, а не Stream.concat:

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

Затем вы можете выполнить любую обработку, которая вам требуется для Stream. Например, создайте List из всех User s:

List<User> userList = map.values()
                         .stream()
                         .flatMap(List::stream)
                         .collect(Collectors.toList());
...