list_1 = new ArrayList(set);
** 去重方法2:利用distinct去重**
list.stream().distinct();
- **场景2:**
如果list集合中存储的是对象,那么要根据对象的属性值来进行比较,才能判断是否为同一个对象,那么要进行取值判断
** 去重方法3:利用stream**
userContactsList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet(Comparator.comparing(UserContactsDto::getPhoneNumber))), ArrayList::new));
原理说明:
streamAPI的聚合操作collect可以让我们只关注结果,而collect方法里的collectingAndThen又是属 于 ? ? ? ? ? ? ? ?java.util.stream.Collector,collectingAndThen操作的解释是:先执行前面的操作,然后执行第二部操作后输出结果,这里我们执行的第一步操作就是Collectors.toCollection(() -> new TreeSet(Comparator.comparing(UserContactsDto::getPhoneNumber))),第二步就是将他输出为一个新的ArrayList。
第一步操作里又是用到Collectors接口,这次用的是toCollection方法,就是将方法里的函数或者参数转化为一个collection集合,这里,我们是将Comparator.comparing(UserContactsDto::getPhoneNumber)转化为一个collection,这个collection是一个TreeSet。也就是有序的。因为我们需要去掉重复的值,这个set可以做到,而我们又要保持转化出来的collection依旧有序,所以使用的是一个TreeSet。
Comparator.comparing(UserContactsDto::getPhoneNumber)这里呢,又用到了java.util.Comparator接口,这个接口倒是挺常用的。使用的是他的comparing方法,也就是比较参数的值是否相同,里面用到的是java8的新特性lambda表达式, :: 其实和.没太大区别,举个例子,最常用的System.out.println() 可以表达为System.out::println,可以达到一样的效果
————————————————————————————————————————————————
参考博客:
https://blog.csdn.net/iloveme1/article/details/80589281 --------------------------------------集合List去重总结------------------------
|