liststream流去重
时间: 2023-10-21 18:27:36 浏览: 131
使用Java8的stream流可以很方便地对List进行去重操作。stream流提供了多种方法来实现去重,下面是几种常见的方法:
1. 使用distinct()方法:可以通过list.stream().distinct()来对列表进行去重操作。这种方法适用于List中的元素为简单包装类型,或者自定义对象类型已经重写了equals和hashCode方法,根据业务情况来实现对象的相等判断。
2. 使用collect()方法和Collectors.toSet():可以使用stream流的collect()方法配合Collectors.toSet()来实现去重操作。这种方法会保留原始列表的顺序。示例代码如下:
```
List<String> list = Arrays.asList("A", "B", "A", "C", "B");
List<String> distinctList = list.stream().collect(Collectors.toSet()).stream().collect(Collectors.toList());
```
这样就可以得到去重后的列表distinctList,其中元素的顺序与原始列表保持一致。
3. 使用filter()方法和distinctByField()方法:如果需要根据对象的某个字段进行去重,可以使用stream流的filter()方法结合自定义的distinctByField()方法来实现。distinctByField()方法接收一个Function类型的参数,返回一个Predicate类型,用于根据指定字段进行去重。示例代码如下:
```
List<Person> list = Arrays.asList(new Person("Alice", 25), new Person("Bob", 30), new Person("Alice", 25));
List<Person> distinctList = list.stream().filter(distinctByField(Person::getName)).collect(Collectors.toList());
private static <T> Predicate<T> distinctByField(Function<? super T, ?> fieldExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
return t -> seen.add(fieldExtractor.apply(t));
}
```
这样就可以根据Person对象的name字段进行去重,得到去重后的列表distinctList。、
综上所述,使用Java8的stream流可以很方便地对列表进行去重操作,可以根据需求选择不同的方法来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
阅读全文