Java中,List<Map>类型 如何实现根据map 的某个字段去重
时间: 2024-05-06 18:18:22 浏览: 148
List对象去重和按照某个字段排序的实现方法
可以使用Java 8的Stream API和Lambda表达式实现根据Map中的某个字段去重。假设我们有一个List<Map<String, Object>>类型的数据结构,其中每个Map对象都有一个名为“id”的字段,我们可以按照如下方式去重:
```java
List<Map<String, Object>> list = new ArrayList<>();
// 添加数据到list中
list.add(new HashMap<String, Object>() {{
put("id", "1");
put("name", "张三");
}});
list.add(new HashMap<String, Object>() {{
put("id", "2");
put("name", "李四");
}});
list.add(new HashMap<String, Object>() {{
put("id", "1");
put("name", "王五");
}});
List<Map<String, Object>> distinctList = list.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(m -> m.get("id").toString()))),
ArrayList::new
)
);
System.out.println(distinctList);
```
上述代码中,我们使用了`Collectors.collectingAndThen()`方法来将Stream转换为List,并在转换时使用了TreeSet来去重,其中`Comparator.comparing(m -> m.get("id").toString())`表示对Map对象按照“id”字段进行排序比较,从而实现去重。最终输出结果为:
```
[{id=1, name=张三}, {id=2, name=李四}]
```
阅读全文