日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

java8 list集合對象根據(jù)某個屬性去重

 笑笑兔 2024-09-30

java8方法中l(wèi)ist集合去重數(shù)據(jù),一般通過stream的distinct方法。但是distinct不夠靈活,那么該如何解決呢?

1、自定義去重函數(shù)

  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、應(yīng)用示例

創(chuàng)建實體類

@AllArgsConstructor
@Data
 class Student{

    private String name;

    private Boolean sex;

    private Integer age;

    private Double height;

    private LocalDate birthday;
}

創(chuàng)建測試數(shù)據(jù),以名字唯一去掉重復(fù)數(shù)據(jù)。

List<Student> studentList = new ArrayList<>();
        // 添加測試數(shù)據(jù),請不要糾結(jié)數(shù)據(jù)的嚴(yán)謹(jǐn)性
        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());

打印記錄

[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)]

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多