美文网首页
巧用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