Java 8 lambda函数式实现根据属性值对列表去重

如果你项目用java8,那有一个很简单的处理list中根据某属性的值去重的方法,就是使用lamba函数式,例子代码如下:

List unique = ucShopCourseBizPojoList.stream().collect( collectingAndThen( toCollection(() -> new TreeSet<>(comparingLong(UcShopCourseBizPojo::getId))), ArrayList::new));

其中comparingLong方法是因为pojo类UcShopCourseBizPojo中,根据的id去重,而id这个属性的数据类型是Long,这个方法可以替换成更普遍的方法,例子代码如下:

List sLists = shopCourseLists.stream().collect( Collectors.collectingAndThen(Collectors.toCollection( () -> new TreeSet<>(Comparator.comparing(c -> c.getShopId()))), ArrayList::new) );

但是这种滤重的方法有个缺点,就是获取的list可能每回返回的结果是随机的,比如获取门店课程list,去重相同shopid的课程,如果两个课程shopid相同,则可能每次调用的时候一会返回这个课程,一会返回另一个课程,不知道底层是什么原因造成的,提出这个方法仅供参考,如果有知道原因的也可以留言~

你可能感兴趣的:(javalambda后端)