Java中查询的List返回的数据有重复,想根据某个字段过滤...

15 阅读1分钟

随心笔记,第三更

  List对象根据某个或多个对象去重

import java.util.List;  
import java.util.Map;  
import java.util.stream.Collectors;  
  
// ...  
  
List<Person> persons = // ... 你的Person列表  
  
List<Person> uniquePersons = persons.stream()  
    .collect(Collectors.toMap(  
        Person::getName, // keyMapper - 从Person对象中提取name字段作为Map的键  
        p -> p,          // valueMapper - 直接使用Person对象作为Map的值(这里可以省略,因为默认就是对象本身)  
        (existing, replacement) -> existing, // mergeFunction - 如果key冲突,选择保留已存在的对象(即去重)  
        LinkedHashMap::new)) // mapFactory - 使用LinkedHashMap来保持插入顺序(如果需要的话)  
    .values()             // 获取Map的所有值,即去重后的Person列表  
    .stream()             // 再次转换为Stream,以便可以进一步操作(如果需要的话)  
    .collect(Collectors.toList()); // 收集为List

List<Person> uniquePersons = persons.stream()  
    .collect(Collectors.toMap(  
        p -> new AbstractMap.SimpleEntry<>(p.getName(), p.getAge()), // 使用SimpleEntry作为键  
        p -> p,  
        (existing, replacement) -> existing, // 如果键冲突,保留已存在的对象  
        LinkedHashMap::new)) // 保持插入顺序  
    .values()  
    .collect(Collectors.toList());

欢迎大家在评论区讨论,今天的干货分享就到此结束了,如果觉得对您有帮助,麻烦给个三连!

以上内容为本人的经验总结和平时操作的笔记。若有错误和重复请联系作者删除!!感谢支持!!