你的位置:庄闲和游戏官方网站 > 产品与服务 > 庄闲和游戏网 java8 list集合对象根据某个属性去重

庄闲和游戏网 java8 list集合对象根据某个属性去重

时间:2026-01-14 02:47 点击:160 次

庄闲和游戏网 java8 list集合对象根据某个属性去重

图片

java8方法中list集合去重数据,一般通过stream的distinct方法。但是distinct不够灵活,那么该如何解决呢?

1、自定义去重函数

{jz:field.toptypename/}
  public static  <K,T>Predicate<K> distinctPredicate(Function<K,T>function){
        ConcurrentHashMap<T,Boolean> map=new ConcurrentHashMap<>();
        return t->null == map.putIfAbsent(function.apply(t),true);
    }

2、应用示例

创建实体类

@AllArgsConstructor
@Data
 class Student{

    private String name;

    private Boolean sex;

    private Integer age;

    private Double height;

    private LocalDate birthday;
}

创建测试数据,以名字唯一去掉重复数据。

建站客服QQ:88888888
List<Student> studentList = new ArrayList<>();
        // 添加测试数据,庄闲和app请不要纠结数据的严谨性
        studentList.add(new Student("张三", true, 18, 1.75, LocalDate.of(2005, 3, 26)));
        studentList.add(new Student("李四", false, 16, 1.67, LocalDate.of(2007, 8, 30)));
        studentList.add(new Student("王五", true, 23, 1.89, LocalDate.of(2000, 1, 16)));
        studentList.add(new Student("麻六", false, 27, 1.75, LocalDate.of(1996, 9, 20)));
        studentList.add(new Student("张三", false, 30, 1.93, LocalDate.of(1993, 6, 19)));

       studentList = studentList.stream().filter(distinctPredicate(Student::getName)).collect(Collectors.toList());
        log.info(studentList.toString());

打印记录

{jz:field.toptypename/}
[Student(name=张三, sex=true, age=18, height=1.75, birthday=2005-03-26), Student(name=李四, sex=false, age=16, height=1.67, birthday=2007-08-30), Student(name=王五, sex=true, age=23, height=1.89, birthday=2000-01-16),
Student(name=麻六, sex=false, age=27, height=1.75, birthday=1996-09-20)]
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。
服务热线
官方网站:hbghbeauty.com
工作时间:周一至周六(09:00-18:00)
联系我们
QQ:2852320325
邮箱:hbghbeauty.com @qq.com
地址:武汉东湖新技术开发区光谷大道国际企业中心
关注公众号
庄闲游戏手机App

Copyright © 1998-2026 庄闲和游戏官方网站™版权所有

hbghbeauty.com 备案号 备案号: 沪ICP备2024083968号-11

技术支持:®庄闲游戏 RSS地图 HTML地图