两个map分别为map1和map2。map1中的value(这个value是一个list集合),map2中的key。有没有比较好的方法把map1中的key,和map2中的value组成一个新map
时间: 2023-08-05 22:04:52 浏览: 125
可以使用Java 8的Stream API来实现。具体的代码如下所示:
```java
Map<String, List<Integer>> map1 = new HashMap<>();
Map<Integer, String> map2 = new HashMap<>();
// 初始化map1和map2
Map<String, String> newMap = map1.entrySet().stream()
.flatMap(entry -> entry.getValue().stream()
.map(value -> new AbstractMap.SimpleEntry<>(entry.getKey(), value)))
.filter(entry -> map2.containsKey(entry.getValue()))
.collect(Collectors.toMap(
AbstractMap.SimpleEntry::getKey,
entry -> map2.get(entry.getValue())
));
```
解释一下这段代码的具体实现过程:
- 首先使用`entrySet()`方法获取`map1`中的所有键值对;
- 然后使用`flatMap()`方法对`map1`中的每个键值对进行操作,将其转换成一个新的键值对,新的键为`map1`中的键,新的值为`map1`中的值中的每个元素;
- 接着使用`filter()`方法过滤掉值在`map2`中不存在的键值对;
- 最后使用`collect()`方法将过滤后的键值对转换成一个新的`Map`对象,其中键为`map1`中的键,值为`map2`中对应的值。
最终得到的`newMap`对象即为由`map1`和`map2`组成的新的`Map`对象。
阅读全文