在Java 8中具有Set的映射,如何将所有值放在一组中?

时间:2019-03-28 14:47:40

标签: java dictionary java-8 set java-stream

我有一个Map<String, Set<String>>。我希望使用流API在新的Set<String>中将此映射中的所有值。我能够得到一个Set<Set<String>>,但是我想要的是将我的地图中所有集合的所有值放在一个集合中。使用流有可能吗?

谢谢。

3 个答案:

答案 0 :(得分:5)

您在这里:

Set<String> allStrings = map.values()
   .stream()
   .flatMap(Set::stream)
   .collect(Collectors.toSet());

答案 1 :(得分:1)

另一个解决方案也可以是:

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

答案 2 :(得分:0)

您可以使用Stream.collect()方法来实现:

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

如果需要更加灵活,则应使用Stream.flatMap()解决方案。