从Map >从Set 键的集合中收集值

问题描述 投票:0回答:1

我正在尝试使用map将一组键映射到String到Set of Integer的字符串映射中。理想情况下,我想获取所有值集并将它们收集到一个集合中。

让我说:

Map<String, List<Integer>> keyValueMap = new HashMap<>();
Set<String> keys = new HashSet<>();
Set<String> result = new HashSet<>();

我尝试过:

result.addAll(keys.stream().map(key -> keyValueMap.get(key)).collect(Collectors.toSet());

这使我得到一个错误,说addAll()不适用于Set类型>。我曾尝试用flatMap()替换map(),但如果这是解决方案,则似乎语法不正确。

使这项工作正确的语法是什么?

谢谢!

java java-stream
1个回答
0
投票

使用您的代码段,您尝试在Set#addAll上调用Set<String>,但是传递的参数是Set<List<String>>,它不会编译。

为了改善您的问题,一种解决方案是使用flatMap而不是map

result.addAll(keys.stream()
                  .flatMap(key -> keyValueMap.get(key).stream())
                  .collect(Collectors.toSet());
© www.soinside.com 2019 - 2024. All rights reserved.