我们首先创建一个方法作为 Stream.filter() 的参数,其返回类型为 Predicate,原理就是判断一个元素能否加入到 Set 中去,代码如下: private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) { Set<Object> seen = ConcurrentHashMap.newKeySet(); return t -> seen.add(keyExtract...
Stream:一种来自 Java 8 的新 API,可以以顺序或并行的方式处理数据。 中间操作:如filter(),map(),distinct()等,返回一个流,这些操作是懒操作。 终端操作:如collect(),forEach(),reduce()等,会触发流的处理。 使用Stream 去重 在处理集合去重时,distinct()方法相对简单,但默认情况下,它是基于对象的equals()...
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...
Java stream根据对象某个字段过滤重复数据:distinctByKey 一、原生的distinct()不支持按照列表里的对象某个属性去重 二、对某个字段过滤重复数据:使用HashMap privatestatic<T> Predicate<T> distinctByKey(Function<?superT, ?>keyExtractor) { Map<Object, Boolean> seen =newConcurrentHashMap<>();returnt -> s...
distinctByKey()方法接受一个Function作为参数,该Function用于提取要去重的字段。在内部实现中,我们使用了ConcurrentHashMap来存储已经出现过的字段值,判断字段值是否已经存在,如果已经存在则过滤掉,否则保留。 完整示例 下面是一个完整的示例代码,展示了如何使用Java Stream对Person集合进行去重操作: ...
Distinct Numbers:[1,2,3,4,5,6,7] 在这个示例中,我们使用distinct方法从包含重复整数的列表中删除了重复的值,并得到了一个包含唯一整数的列表。 示例代码二 代码语言:javascript 代码运行次数:0 运行 AI代码解释 importjava.util.Arrays;importjava.util.List;importjava.util.stream.Collectors;publicclassDistinct...
distinct()不提供按照属性对对象列表进行去重的直接实现。它是基于hashCode()和equals()工作的。 如果我们想要按照对象的属性,对列表进行去重,我们可以通过如下方法来实现: publicstatic<T>Predicate<T>distinctByKey(Function<?superT,?>keyExtractor){Map<Object,Boolean>seen=newConcurrentHashMap<>();returnt->seen...
distinct() 方法声明如下: Stream<T> distinct(); 1.1 对于 String 列表的去重 因为String 类已经覆写了 equals() 和 hashCode() 方法,所以可以去重成功。 @Test public void listDistinctByStreamDistinct() { // 1. 对于 String 列表去重 List<String> stringList = new ArrayList<String>() {{ add("A...
distinct() 方法声明如下: Stream<T> distinct(); 1.1 对于 String 列表的去重 因为String 类已经覆写了 equals() 和hashCode() 方法,所以可以去重成功。 @Test public void listDistinctByStreamDistinct() { // 1. 对于 String 列表去重 List<String> stringList = new ArrayList<String>() {{ add("A"...
distinct() 方法声明如下: Streamdistinct(); 1.1 对于 String 列表的去重 因为String 类已经覆写了 equals() 和 hashCode() 方法,所以可以去重成功。 @Test public void listDistinctByStreamDistinct() { // 1. 对于 String 列表去重 ListstringList = new ArrayList() {{ ...