#java #dictionary #java-8 #set #java-stream
#java #словарь #java-8 #установить #java-stream
Вопрос:
У меня есть Map<String, Set<String>>
. Я хочу, чтобы все значения из этой карты были в новом, Set<String>
используя streams API. Я смог получить Set<Set<String>>
, но то, что я хочу, это все значения всех наборов из моей карты, в одном наборе. Возможно ли это с использованием streams?
Заранее спасибо.
Комментарии:
1. Взгляните на
flatMap()
.
Ответ №1:
Вот так:
Set<String> allStrings = map.values()
.stream()
.flatMap(Set::stream)
.collect(Collectors.toSet());
Комментарии:
1. map.values уже представляет набор. итак, map.values() достаточно. Ключ потерян.
Ответ №2:
Другим решением также может быть :
Set<String> set = new HashSet<>();
map.values().forEach(set::addAll);
Ответ №3:
Для достижения этой цели вы можете использовать Stream.collect()
метод:
Set<String> set = map.values().stream()
.collect(HashSet::new, HashSet::addAll, HashSet::addAll);
Если вам нужно быть более гибким, вы должны использовать Stream.flatMap()
решение.