我有两张 Map<String, Set<String>>
类型的 map 我需要根据每个的键进行合并。我正在使用 Java 8。
我尝试过以下方法:
Map<String, Set<String>> collect = Stream.of(keyColumnValueAccumulator, keyColumnValues)
.map(Map::entrySet)
.flatMap(Collection::stream)
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue));
但在运行时这会导致“重复 key ”错误。请问有人可以帮忙吗?我对 Java 8 和 Stream API 还很陌生
最佳答案
您还可以使用Map::merge避免重复键错误的方法。
示例:
Map<String, Set<String>> accumulator = new HashMap<>();
firstMap.forEach((k, v) -> accumulator.merge(k, v, (prev, cur) -> {prev.addAll(cur); return prev;}));
secondMap.forEach((k, v) -> accumulator.merge(k, v, (prev, cur) -> {prev.addAll(cur); return prev;}));
在发生按键冲突的情况下,我们只需将两个集合累积为一个集合,但如果这不是所需的行为,您可以随时更改它或为 remappingFunction
创建自定义函数。
关于lambda - 合并两个 Map<String, Set<String>> 类型的 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50863548/