我有一个List,List里存的是Map<String, List<PermissionEnum>>类型的对象,现在我希望遍历List,将里面的Map根据Key合并,Value要去重。最后得到的是合并后的Map<String, List<PermissionEnum>>对象。
时间: 2024-04-09 20:34:05 浏览: 96
Java中 List《map》把里面map中某个key相同记录的其他key 的 value 合并
您可以使用Java 8的Stream API来完成这个任务。首先,您可以使用`flatMap`操作符将List转换为一个Stream,然后使用`collect`操作符将其收集回一个Map。在`collect`操作符中,您可以使用`toMap`方法来合并Map,并使用`Collectors.toList()`来去重List。以下是一个示例代码:
```java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 示例数据
List<Map<String, List<PermissionEnum>>> list = new ArrayList<>();
Map<String, List<PermissionEnum>> map1 = new HashMap<>();
map1.put("key1", List.of(PermissionEnum.PERMISSION1, PermissionEnum.PERMISSION2));
map1.put("key2", List.of(PermissionEnum.PERMISSION3, PermissionEnum.PERMISSION4));
Map<String, List<PermissionEnum>> map2 = new HashMap<>();
map2.put("key2", List.of(PermissionEnum.PERMISSION4, PermissionEnum.PERMISSION5));
map2.put("key3", List.of(PermissionEnum.PERMISSION6, PermissionEnum.PERMISSION7));
list.add(map1);
list.add(map2);
// 合并Map并去重
Map<String, List<PermissionEnum>> mergedMap = list.stream()
.flatMap(map -> map.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(existingList, newList) -> {
List<PermissionEnum> mergedList = new ArrayList<>(existingList);
mergedList.addAll(newList);
return mergedList.stream().distinct().collect(Collectors.toList());
}));
// 打印结果
mergedMap.forEach((key, value) -> System.out.println(key + ": " + value));
}
}
enum PermissionEnum {
PERMISSION1,
PERMISSION2,
PERMISSION3,
PERMISSION4,
PERMISSION5,
PERMISSION6,
PERMISSION7
}
```
运行以上代码,您将得到合并后的Map,每个key对应的value都是去重后的List。
阅读全文