当前位置:首页 > 编程教程 > java技术文章 > 如何实现java8 list按照元素的某个字段去重

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

  • 发布时间:
  • 作者:码农之家
  • 点击:88

这篇文章主要知识点是关于java、list、去重、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Java高并发编程详解:多线程与架构设计
  • 类型:Java大小:120.77 MB格式:PDF作者:汪文君
立即下载

如何实现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的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

您可能感兴趣的文章:

  • 伸入分析Java集合之LinkedList源码分析
  • Java List 用法实例详解
  • Java ArrayList底层实现代码分析
  • Java基于JDK 1.8的LinkedList源码实例
  • Java中List用法及实例详解
  • java 相关电子书
    学习笔记

    Copyright 2018-2020 www.xz577.com 码农之家

    版权投诉 / 书籍推广 / 赞助:520161757@qq.com