美文网首页
巧用lambda表达式系列(1)—选择属性实现集合对象的去重

巧用lambda表达式系列(1)—选择属性实现集合对象的去重

作者: 小胖学编程 | 来源:发表于2022-05-11 17:40 被阅读0次

    一般对集合对象去重,我们会借助Set来完成。Set集合会校验对象的equals方法和hashCode方法来判断两个对象是否相同。

    但是有一些场景下是判断对象某些属性(例如id)来进行去重。

    原有方式

    这种方式我们会一般会采用如下的方式:

    每次都需要新建一个Set,然后借助set.add()方法,校验下id是否在set中。

    Set<User> ids=new HashSet<>();
    List<User> distinctList = us.stream().filter(ids::add).collect(Collectors.toList());
    System.out.println(JSON.toJSONString(distinctList));
    

    lambda提供静态方法

    实现:将Function函数转化为Predicate函数。

    /**
    * 根据id去重,
    */
    private static  <T, R> Predicate<T> distinctById(Function<T, R> function) {
      Set<R> set = new HashSet<>();
      return h -> set.add(function.apply(h));
    }
    

    使用方式:

    List<User> collect = us.stream().filter(distinctById(User::getId)).collect(Collectors.toList());
    

    推荐阅读

    颠覆认知的Java-lambda流特效:构建管道->数据流转

    相关文章

      网友评论

          本文标题:巧用lambda表达式系列(1)—选择属性实现集合对象的去重

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