当前位置:主页 > java教程 > 如何实现java8 list按照元素的某个字段去重

实现java8 list按照元素的某个字段去重的方法

发布:2020-04-24 08:43:56 88


为网友们分享了java相关的编程文章,网友文阳炎根据主题投稿了本篇教程内容,涉及到java、list、去重、如何实现java8 list按照元素的某个字段去重相关内容,已被868网友关注,相关难点技巧可以阅读下方的电子资料。

如何实现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 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));
}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。


参考资料

相关文章

  • 伸入分析Java集合之LinkedList源码分析

    发布:2020-02-02

    这篇文章主要为大家详细介绍了Java集合系列之LinkedList源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • Java List 用法实例详解

    发布:2020-02-01

    这篇文章主要介绍了Java List 用法详解及实例分析的相关资料,需要的朋友可以参考下


  • Java ArrayList底层实现代码分析

    发布:2020-01-04

    今天小编就为大家分享一篇Java ArrayList的底层实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


  • Java基于JDK 1.8的LinkedList源码实例

    发布:2019-06-22

    这篇文章主要给大家介绍了关于Java基于JDK 1.8的LinkedList源码的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起


  • Java中List用法及实例详解

    发布:2020-03-12

    这篇文章主要介绍了Java List 用法实例详解的相关资料,需要的朋友可以参考下


网友讨论