参考了网上的方法,发现这个最有用
根据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 字段)
运行结果