List<?>对象 stream某个字段去重
时间: 2023-12-11 18:06:04 浏览: 125
如果你有一个List对象,其中包含多个对象,并且你想要使用Java 8中的Stream API按照某个字段进行去重,可以按照以下步骤操作:
1. 使用`stream()`方法将List转换为Stream对象。
2. 使用`distinct()`方法根据某个字段进行去重。如果你想要根据对象的某个属性进行去重,可以使用`map()`方法将Stream中的对象映射为该属性的值。
3. 使用`collect()`方法将去重后的结果收集到一个新的List中。
以下是示例代码:
```java
List<MyObject> list = getList(); // 假设这里有一个List对象
List<MyObject> distinctList = list.stream()
.filter(distinctByKey(MyObject::getField)) // 根据某个字段进行去重
.collect(Collectors.toList()); // 将去重后的结果收集到一个新的List中
// 去重方法
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;
}
```
其中,`MyObject`是你自己定义的对象,`getField()`是该对象中需要用于去重的字段。在上述代码中,`distinctByKey()`方法是用于根据某个字段进行去重的方法,它使用`ConcurrentHashMap`来保存已经出现过的值,如果该值已经存在,则返回false,否则返回true。
阅读全文
相关推荐

















