美文网首页
JavaStream 常用操作(三) 按对象属性去重复

JavaStream 常用操作(三) 按对象属性去重复

作者: 尼尔君 | 来源:发表于2020-06-18 15:23 被阅读0次
distinct()不提供按照属性对对象列表进行去重的直接实现。它是基于hashCode()和equals()工作的。如果我们想要按照对象的属性,对对象列表进行去重,我们可以通过其它方法来实现。如下代码段所示:

static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
        Map<Object,Boolean> seen = new ConcurrentHashMap<>();
        return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
} 
上面的方法可以被Stream接口的 filter()接收为参数,如下所示:

list.stream().filter(distinctByKey(b -> b.getName())); 

相关文章

网友评论

      本文标题:JavaStream 常用操作(三) 按对象属性去重复

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