今天工作偶然碰到需要根据某一属性过滤一个list集合,经过查找看到了这种stream流的过滤方式,感觉还是有点意思,以后也会用到,特此记录一下
ArrayList<IcsCloudDTO> collect3 = icsCloudDTOS.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()->
new TreeSet<>(Comparator.comparing(item->item.getBrandModelId()))), ArrayList::new));
该方法主要是将集合放在TreeSet中,并且传入一个根据某个属性进行比较的比较器,最终将TreeSet放入构造器中生成一个新的list。
Collectors.collectingAndThen方法是对结果集进行收集后进行下一步处理,可以点进去看一下方法传参
public static<T,A,R,RR> Collector<T,A,RR> collectingAndThen(Collector<T,A,R> downstream,
Function<R,RR> finisher)
两个参数,一个Collector接口的子类,一个Function函数,就很清晰了,Function函数:R apply(T t),调用ArrayList的有参构造。