两个Map<String, Set<Long>> Key相同,value相加用Java 8的Stream API来完成
时间: 2024-04-08 17:34:03 浏览: 130
如何利用Java8 Stream API对Map按键或值排序
5星 · 资源好评率100%
要使用Java 8的Stream API将具有相同键的值相加,您可以使用`Collectors.toMap()`方法结合lambda表达式进行操作。以下是一个示例代码:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
Map<String, Set<Long>> map1 = new HashMap<>();
map1.put("A", new HashSet<>(Arrays.asList(1L, 2L, 3L)));
map1.put("B", new HashSet<>(Arrays.asList(2L, 3L, 4L)));
map1.put("C", new HashSet<>(Arrays.asList(3L, 4L, 5L)));
Map<String, Set<Long>> map2 = new HashMap<>();
map2.put("A", new HashSet<>(Arrays.asList(3L, 4L, 5L)));
map2.put("D", new HashSet<>(Arrays.asList(5L, 6L, 7L)));
Map<String, Set<Long>> result = Stream.of(map1, map2)
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(set1, set2) -> {
Set<Long> combinedSet = new HashSet<>(set1);
combinedSet.addAll(set2);
return combinedSet;
}
));
result.forEach((key, value) -> System.out.println(key + ": " + value));
}
}
```
在上述示例中,我们有两个Map,map1和map2,它们具有相同的键"A"。我们通过使用Stream API和`flatMap()`方法将两个Map合并为一个流,然后使用`Collectors.toMap()`方法将它们组合起来。在`Collectors.toMap()`方法中,我们指定键和值的提取器,然后使用一个合并函数来处理具有相同键的值。在合并函数中,我们将两个Set合并为一个新的Set。
在这个示例中,结果Map中键"A"的值为[1, 2, 3, 4, 5],键"B"的值为[2, 3, 4],键"C"的值为[3, 4, 5],键"D"的值为[5, 6, 7]。
希望这个示例能够满足您的需求!
阅读全文