java8 list 去重

作者: 良人与我 | 来源:发表于2019-06-14 11:17 被阅读8次

    list 按照元素的某个字段去重

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Student  {
        private Integer age;
        private String name;
    }
    
    

    测试数据

    List<Student> studentList = Lists.newArrayList();
    studentList.add(new Student(28, "river"));
    studentList.add(new Student(12, "lucy"));
    studentList.add(new Student(33, "frank"));
    studentList.add(new Student(33, "lucy"));
    

    java8 通过tree set 去重

    List<Student> studentDistinctList = studentList.stream()
                    .collect(Collectors.collectingAndThen
                            (Collectors.toCollection(() ->
                                            new TreeSet<>(Comparator.comparing(t -> t.getName()))),
                                    ArrayList::new
                            )
                    );
    System.out.println(new Gson().toJson(studentDistinctList));
    

    扩展distinct 方法去重

    List<Student> studentDistinct2List = studentList.stream().filter(StreamUtil.distinctByKey(t->t.getName()))
                    .collect(Collectors.toList());
    System.out.println(new Gson().toJson(studentDistinct2List));
    

    工具类

    public class StreamUtil {
        /**
         * https://stackoverflow.com/questions/23699371/java-8-distinct-by-property
         * @param keyExtractor
         * @param <T>
         * @return
         */
        public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
            Set<Object> seen = ConcurrentHashMap.newKeySet();
            return t -> seen.add(keyExtractor.apply(t));
        }
    }
    

    参考地址
    https://stackoverflow.com/questions/23699371/java-8-distinct-by-property

    相关文章

      网友评论

        本文标题:java8 list 去重

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