collectors tocollection treeset Comparator
info = info.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>
(Comparator.comparing(Object::getParam1))),ArrayList::new));
第一种方法的finisher调用的是ArrayList(Collection<? extends E> c),所以就是把Collector<T,A,R> downstream的结果再给到Function<R,RR> finisher去处理,用toCollection收集结果
第二种用treeSet就是用比较器来进行排序去重,如果compareTo返回0,说明是重复的,返回的是自己的某个属性和另一个对象的某个属性的差值,如果是负数,则往前面排,如果是正数,往后面排。在set放元素时,是一个循环比较的过程,一旦有一个相等,就不再比较。
ComparTo()方法是一个比较方法,比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。默认为零系统认为都是同一个对象,所以只存入一个,因为Set集合的无序、唯一性。
参考原文链接:https://blog.csdn.net/xhchen971028/article/details/115481529
- 使用stream()流式方法处理链表;
- 再使用collect进行收口:
- 使用Comparator创建比较器进行指定对象中元素比较列表中每一项,Comparator通常用于创建简单排序,重写Comparable接口中的Compareto方法;
参考链接:https://blog.csdn.net/xiaofei__/article/details/53138681 - 创建TreeSet基于红黑树的Set,结合Comparator来进行排序去重;
参考链接:https://blog.csdn.net/qq_21484461/article/details/132841982 - 最后再将其转换为ArrayList进行收集。
- 使用Comparator创建比较器进行指定对象中元素比较列表中每一项,Comparator通常用于创建简单排序,重写Comparable接口中的Compareto方法;