java8 stream 根据属性去重
时间: 2023-11-03 09:46:48 浏览: 33
可以使用 distinct() 方法,再利用参数为 Function 的 distinct() 方法,根据指定属性去重。例如:list.stream().distinct().collect(Collectors.toList()); 或者list.stream().filter(distinctByKey(Student::getName)).collect(Collectors.toList()); (需要自定义一个 distinctByKey 方法)
相关问题
java8 stream 属性去重
对于Java 8的Stream属性去重,你可以使用distinct()方法来实现。distinct()方法返回一个去重后的Stream,它根据元素的hashCode()和equals()方法来判断是否重复。
下面是一个示例代码,演示了如何在Stream中去重属性:
```java
List<Person> persons = Arrays.asList(
new Person("John", 25),
new Person("Alice", 30),
new Person("John", 25),
new Person("Bob", 35)
);
List<Person> distinctPersons = persons.stream()
.distinct()
.collect(Collectors.toList());
distinctPersons.forEach(System.out::println);
```
在这个例子中,Person类有name和age两个属性。使用distinct()方法可以去除相同的Person对象,保留唯一的对象。请确保Person类正确地实现了hashCode()和equals()方法。
java stream根据某个属性去重
可以使用Java 8 Stream的distinct()方法对某个属性进行去重。比如,对于一个包含对象的流,可以使用以下代码对属性name进行去重:
list.stream().filter(distinctByKey(Employee::getName)).collect(Collectors.toList());
其中distinctByKey()方法可以自己实现,代码如下:
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}