您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页java8 list 去重

java8 list 去重

来源:化拓教育网

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  -> 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 {
    /**
     * 
     * @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));
    }
}

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务