我正在尝试使用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(),但如果这是解决方案,则似乎语法不正确。
使这项工作正确的语法是什么?
谢谢!
使用您的代码段,您尝试在Set#addAll
上调用Set<String>
,但是传递的参数是Set<List<String>>
,它不会编译。
为了改善您的问题,一种解决方案是使用flatMap
而不是map
:
result.addAll(keys.stream()
.flatMap(key -> keyValueMap.get(key).stream())
.collect(Collectors.toSet());