关于java:Java-8-lambda函数式实现根据属性值对列表去重

6次阅读

共计 679 个字符,预计需要花费 2 分钟才能阅读完成。

如果你我的项目用 java8,那有一个很简略的解决 list 中依据某属性的值去重的办法,就是应用 lamba 函数式,例子代码如下:

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

其中 comparingLong 办法是因为 pojo 类 UcShopCourseBizPojo 中,依据的 id 去重,而 id 这个属性的数据类型是 Long, 这个办法能够替换成更广泛的办法,例子代码如下:

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

然而这种滤重的办法有个毛病,就是获取的 list 可能每回返回的后果是随机的,比方获取门店课程 list,去重雷同 shopid 的课程,如果两个课程 shopid 雷同,则可能每次调用的时候一会返回这个课程,一会返回另一个课程,不晓得底层是什么起因造成的,提出这个办法仅供参考,如果有晓得起因的也能够留言~

正文完
 0