stream怎么对象去重
时间: 2023-11-28 15:43:13 浏览: 93
Java 8中,可以使用Stream的distinct()方法对对象进行去重。但是,如果要根据对象的某个属性进行去重,则需要使用Stream的map()方法和collect()方法结合使用。具体步骤如下:
1. 使用map()方法将对象转换为其属性值的流。
2. 使用distinct()方法对属性值进行去重。
3. 使用map()方法将属性值转换回对象。
4. 使用collect()方法将去重后的对象流转换为List或Set等集合类型。
下面是一个示例代码,假设有一个Person类,其中包含id和name两个属性,我们要根据id对Person对象进行去重:
```java
List<Person> personList = new ArrayList<>();
// 添加Person对象到列表中
List<Person> distinctPersonList = personList.stream()
.filter(distinctByKey(Person::getId))
.collect(Collectors.toList());
// 定义distinctByKey方法
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
```
在上面的代码中,我们使用了distinctByKey()方法来根据id属性进行去重。该方法使用ConcurrentHashMap来存储已经出现过的id值,如果一个id值已经存在于Map中,则表示该Person对象已经出现过,应该被过滤掉。
阅读全文