对List集合中对象的某一个属性进行去重排序 妖狐艹你老母 2022-01-22 06:21 354阅读 0赞 **引言:** 本文主要介绍通过JDK提供的原始的去重排序和使用Lambda表达式的形式进行集合中数据的去重和排序 **一.环境准备:** 1.实体类: public class User { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public User() { } public User(Long id, String name) { this.id = id; this.name = name; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + '}'; } } 2.插入测试数据: User u1 = new User(1L, "li"); User u2 = new User(2L, "哈哈"); User u3 = new User(1L, "li"); User u4 = new User(2L, "li"); List classList = new ArrayList(); classList.add(u1); classList.add(u2); classList.add(u3); classList.add(u4); **二.根据name属性值的Ascll码进行排序,没有去重:** /** * 按照List中的某个String类型的属性进行排序 * * @param list */ Collections.sort(classList, new Comparator() { @Override public int compare(Object o1, Object o2) { User e1 = (User) o1; User e2 = (User) o2; return e1.getName().compareTo(e2.getName()); } }); classList.forEach( e -> System.out.println(e)); **三.通过name属性进行去重和重排序:** Set<User> set = new TreeSet<User>(new Comparator<User>() { @Override public int compare(User o1, User o2) { return o1.getName().compareTo(o2.getName()); } }); set.addAll(classList); List<User> list = new ArrayList<>(set); list.forEach( e -> System.out.println(e)); **四.采用lambda进行去重和排序:** List list1 = (List) classList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(User::getName))), ArrayList::new)); list1.forEach( e -> System.out.println(e)); **五.总结:** 以上完成了对集合中的对象的属性进行去重和排序操作,使用lambda的方式显的代码少简单,但是不容易懂。
还没有评论,来说两句吧...