美文网首页
Java 8 lambda函数式实现根据属性值对列表去重

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

作者: xuezhongyu01 | 来源:发表于2020-03-31 10:10 被阅读0次

    如果你项目用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相同,则可能每次调用的时候一会返回这个课程,一会返回另一个课程,不知道底层是什么原因造成的,提出这个方法仅供参考,如果有知道原因的也可以留言~

    相关文章

      网友评论

          本文标题:Java 8 lambda函数式实现根据属性值对列表去重

          本文链接:https://www.haomeiwen.com/subject/xiniuhtx.html