美文网首页
stream流根据对象指定字段去重

stream流根据对象指定字段去重

作者: 我想放假休息 | 来源:发表于2020-12-28 11:34 被阅读0次

    原大神地址:http://www.dtmao.cc/news_show_155614.shtml
    防止大神的地址失效:
    自己先copy一遍

    先封装一个去重的方法

    import java.util.Map;
    import java.util.concurrent.ConcurrentHashMap;
    import java.util.function.Function;
    import java.util.function.Predicate;
    
    /**
     * 程熙cjp:https://blog.csdn.net/weixin_41133233
     * 去重工具类
     *
     * @author chengxi
     * @date 2020/3/17 17:15
     */
    public class DeduplicationUtil {
    
        /**
         * 自定义函数去重
         *
         * @param keyExtractor
         * @param <T>
         * @return
         */
        public 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;
        }
    
    }
    

    案例:

    // 注意需要关流之后,才会完成去重,如果继续操作流可能拿到未去重的数据
    List<TraceLogEchoVO> logEchoVOList = traceLogEchoVOList.stream()
             .filter(DeduplicationUtil.distinctByKey(d -> d.getVisitorNo()))
             .collect(Collectors.toList());
    

    相关文章

      网友评论

          本文标题:stream流根据对象指定字段去重

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