对List集合中对象的某一个属性进行去重排序

引言:
    本文主要介绍通过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的方式显的代码少简单,但是不容易懂。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值