一个list集合装有多个对象,对象的id字段可能重复,name字段不会重复,保留id字段值不同的对象,相同的值对象进行去重,使用stream
时间: 2024-09-23 15:04:26 浏览: 46
List集合多个复杂字段判断去重的案例
当你有一个List集合,其中包含多个对象,这些对象拥有id和name两个字段,并且id可以重复,但name是唯一的,你可以使用Java 8 Stream API来处理这个问题。首先,你需要对这些对象进行分组,然后基于每个唯一ID保持一个对象。以下是步骤:
```java
import java.util.*;
import java.util.stream.Collectors;
class MyClass {
private int id;
private String name;
// getters and setters...
}
List<MyClass> list = ... // your collection of MyClass objects
// 使用Stream filter、distinctBy和collect进行去重
List<MyClass> uniqueList = list.stream()
.collect(Collectors.groupingBy(MyClass::getId,
Collectors.mapping(
Function.identity(), // 保持原对象不变
Collectors.toList())));
```
这里,`Collectors.groupingBy()`方法按照`getId`方法的返回值将对象分组,`Function.identity()`表示我们想要保持原始对象,而`Collectors.toList()`则是收集每个组的一个列表。这样,最终得到的`uniqueList`中就只会包含id值不同的对象。
阅读全文