我们首先创建一个方法作为 Stream.filter() 的参数,其返回类型为 Predicate,原理就是判断一个元素能否加入到 Set 中去,代码如下: private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) { Set<Object> seen = ConcurrentHashMap.newKeySet(); return t -> seen.add(keyExtract...
Java stream根据对象某个字段过滤重复数据:distinctByKey 一、原生的distinct()不支持按照列表里的对象某个属性去重 二、对某个字段过滤重复数据:使用HashMap privatestatic<T> Predicate<T> distinctByKey(Function<?superT, ?>keyExtractor) { Map<Object, Boolean> seen =newConcurrentHashMap<>();returnt -> s...
out.print("distinct去重后:"); out.println(objectMapper.writeValueAsString(studentList));//这里我们将 distinctByKey() 方法作为 filter() 的参数,过滤掉那些不能加入到 set 的元素 studentList =studentList.stream().filter(distinctByKey(Student::getName)).collect(Collectors.toList()); out.print("...
list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()->newTreeSet<>(Comparator.comparing(s -> s.getAge())), ArrayList::new)) .forEach(System.out::println); }//次方法来源于:https://blog.csdn.net/haiyoung/article/details/80934467static<T> Predicate<T> distinctByKey1...
Javastream根据对象某个字段过滤重复数据:distinctByKey ⼀、原⽣的distinct()不⽀持按照列表⾥的对象某个属性去重 ⼆、对某个字段过滤重复数据:使⽤HashMap private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) { Map<Object, Boolean> seen = new ConcurrentHash...
distinctByKey()方法接受一个Function作为参数,该Function用于提取要去重的字段。在内部实现中,我们使用了ConcurrentHashMap来存储已经出现过的字段值,判断字段值是否已经存在,如果已经存在则过滤掉,否则保留。 完整示例 下面是一个完整的示例代码,展示了如何使用Java Stream对Person集合进行去重操作: ...
distinct() 方法声明如下: Streamdistinct(); 1.1 对于 String 列表的去重 因为String 类已经覆写了 equals() 和 hashCode() 方法,所以可以去重成功。 @Test public void listDistinctByStreamDistinct() { // 1. 对于 String 列表去重 ListstringList = new ArrayList() {{ ...
distinct()不提供按照属性对对象列表进行去重的直接实现。它是基于hashCode()和equals()工作的。 如果我们想要按照对象的属性,对列表进行去重,我们可以通过如下方法来实现: publicstatic<T>Predicate<T>distinctByKey(Function<?superT,?>keyExtractor){Map<Object,Boolean>seen=newConcurrentHashMap<>();returnt->seen...
stream().distinct().collect(Collectors.toList()); out.print("distinct去重后:"); out.println(objectMapper.writeValueAsString(studentList)); // 这里我们将 distinctByKey() 方法作为 filter() 的参数,过滤掉那些不能加入到 set 的元素 studentList = studentList.stream().filter(distinctByKey(Student:...
我们首先创建一个方法作为 Stream.filter() 的参数,其返回类型为 Predicate,原理就是判断一个元素能否加入到 Set 中去,代码如下: private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) { Set<Object> seen = ConcurrentHashMap.newKeySet(); return t -> seen.add(keyExtract...