java stream流,两个map,如何得出不同的key值
时间: 2024-03-13 21:46:04 浏览: 126
可以使用Java 8的Stream API中的flatMap和distinct方法来实现。
假设有两个Map对象:map1和map2,它们的key和value类型分别为K1、V1和K2、V2。要获取两个Map对象中不同的key值,可以按照以下步骤进行处理:
1. 将两个Map对象的key值分别取出来,使用Stream的flatMap方法将它们合并到一个Stream对象中。
2. 使用Stream的distinct方法去重,得到不同的key值的Stream对象。
3. 将不同的key值转换成List或Set对象,以便后续使用。
代码示例:
```java
Map<K1, V1> map1 = ...
Map<K2, V2> map2 = ...
List<Object> differentKeys = Stream.concat(map1.keySet().stream(), map2.keySet().stream())
.distinct()
.collect(Collectors.toList());
```
其中,Object类型可以根据实际情况替换成K1或K2类型。同时,也可以使用Set集合来避免重复的key值。
相关问题
java stream流,两个map,根据key取交集
可以使用Java 8中的Stream API来实现。首先将两个Map的key集合取交集,然后使用Stream的filter方法过滤出交集,最后使用Stream的collect方法将过滤后的结果收集到一个新的Map中。
示例代码如下:
```java
Map<String, Integer> map1 = new HashMap<>();
map1.put("a", 1);
map1.put("b", 2);
map1.put("c", 3);
Map<String, Integer> map2 = new HashMap<>();
map2.put("b", 4);
map2.put("c", 5);
map2.put("d", 6);
Set<String> intersection = map1.keySet().stream()
.filter(map2::containsKey)
.collect(Collectors.toSet());
Map<String, Integer> resultMap = map1.entrySet().stream()
.filter(entry -> intersection.contains(entry.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
System.out.println(resultMap); // 输出 {b=2, c=3}
```
在上面的示例代码中,我们首先使用Stream的filter方法过滤出两个Map的key的交集,然后使用Stream的collect方法将交集收集到一个Set中。接着,我们再使用Stream的filter和collect方法,将map1中key在交集中的entry收集到一个新的Map中。
java stream流,两个map,取出相同的key
可以使用Java 8中的Stream API来实现。我们可以通过Stream的filter方法过滤出两个Map中相同的key,然后将这些key收集到一个新的集合中。
示例代码如下:
```java
Map<String, Integer> map1 = new HashMap<>();
map1.put("a", 1);
map1.put("b", 2);
map1.put("c", 3);
Map<String, Integer> map2 = new HashMap<>();
map2.put("b", 4);
map2.put("c", 5);
map2.put("d", 6);
Set<String> commonKeys = map1.keySet().stream()
.filter(map2::containsKey)
.collect(Collectors.toSet());
System.out.println(commonKeys); // 输出 [b, c]
```
在上面的示例代码中,我们首先使用Stream的filter方法过滤出map1中与map2中相同的key,然后使用Stream的collect方法将这些key收集到一个Set中。最后,我们将这个Set输出到控制台上。
阅读全文