List去重问题

1、大家都知道set集合是么有重复的,所以将list集合转换成set集合就会自动去除重复元素。当然也可以循环list去重这种比较简单的方法。

public static List remove(List list) {
HashSet h = new HashSet(list);
list.clear();
list.addAll(h);
return list;
}
2、但是我们会发现,如果list里面存的是两个相同的对象时候是没办法简单去重的,这个时候改怎么办呢?这时候就要用上 对象中重写equals()方法和hashCode()方法,将这两个方法重写在对应的对象类中

//重写equals方法
@Override
public boolean equals(Object obj) {
Object obj= (Object ) obj;
return name.equals(obj.getName()) && (age==obj.geId());
}

//重写hashCode方法
@Override
public int hashCode() {
String str = name + Id;
return str.hashCode();
}

3、使用Java8新特性stream去重
复制代码
//根据name属性去重
List unique1 = userList.stream().collect(
collectingAndThen(
toCollection(() -> new TreeSet<>(comparing(User::getName))), ArrayList::new));

    System.out.println(unique1.toString());

    //根据name,age属性去重
    List<User> unique2 = userList.stream().collect(
            collectingAndThen(
                    toCollection(() -> new TreeSet<>(comparing(o -> o.getName() + ";" + o.getAge()))), ArrayList::new)
    );

    System.out.println(unique2.toString());
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值