java8 List根据某个字段去重 支持多字段去重

参考了网上的方法,发现这个最有用

根据List<Member>里的 i 和 s 字段,如果两个一样,就去重

代码很长,请耐心打完

List<Member> m = members.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(o->o.getI()+";"+o.getS()))),ArrayList::new));
红色部分是我自己的,黑色的都是调用系统的

List<Member> m = members.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(o->o.getI()+";"+o.getS()))),ArrayList::new));

我的测试代码

        List<Member> members = new ArrayList<>();
        Member member1 = new Member(1,"s",true,(long)2,3.0,(float)4.0,'c');
        Member member2= new Member(1,"s",false,(long)3,4.0,(float)4.0,'c');
        Member member3= new Member(2,"str",true,(long)2,3.0,(float)4.0,'c');
        Member member4= new Member(2,"s",true,(long)2,3.0,(float)4.0,'c');
        members.add(member1);
        members.add(member2);
        members.add(member3);
        members.add(member4);


        List<Member> m = members.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(o->o.getI()+";"+o.getS()))),ArrayList::new));


        for(Member i : m){
            System.out.println(i.toString());
        }

我的程序去重的规则是前两个元素如果一样就去掉其中一个( i 和 s 字段)

运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值