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