Имея карту Set в Java 8, как я могу поместить все значения в один набор? - PullRequest
2 голосов
/ 28 марта 2019

У меня есть Map<String, Set<String>>. Я хочу, чтобы все значения из этой карты в новом Set<String> с использованием API потоков. Я смог получить Set<Set<String>>, но мне нужны все значения всех наборов с моей карты в одном наборе. Возможно ли это с помощью потоков?

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 28 марта 2019

Вот, пожалуйста:

Set<String> allStrings = map.values()
   .stream()
   .flatMap(Set::stream)
   .collect(Collectors.toSet());
1 голос
/ 28 марта 2019

Другое решение также может быть:

Set<String> set = new HashSet<>();
map.values().forEach(set::addAll);
0 голосов
/ 28 марта 2019

Вы можете использовать метод Stream.collect() для достижения этой цели:

Set<String> set = map.values().stream()
        .collect(HashSet::new, HashSet::addAll, HashSet::addAll);

Если вам нужно быть более гибким, вы должны использовать решение Stream.flatMap().

...