Имея карту Set в Java 8, как я могу поместить все значения в один набор?

#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() решение.