java 8 stream() 按属性去重
时间: 2023-11-02 18:51:14 浏览: 94
在 Java 8 中,使用 Stream API 对对象按属性进行去重可以通过以下方式实现:
假设有一个 `Person` 类,其中包含 `id` 和 `name` 两个属性。
```java
class Person {
private int id;
private String name;
// 构造函数、getter和setter等方法省略
}
```
现在,我们有一个包含多个 `Person` 对象的列表 `List<Person> personList`,我们想根据 `id` 属性对列表进行去重。
```java
List<Person> distinctList = personList.stream()
.collect(Collectors.toMap(Person::getId, Function.identity(), (p1, p2) -> p1))
.values()
.stream()
.collect(Collectors.toList());
```
上述代码中,首先使用 `collect()` 方法和 `Collectors.toMap()` 收集器将 `Person` 对象转换为一个以 `id` 为键、`Person` 对象本身为值的 `Map`。在这个过程中,如果遇到相同的 `id`,则使用 `(p1, p2) -> p1` 的合并函数保留第一个对象。
然后,通过调用 `values()` 方法获取去重后的 `Map` 的值集合,并使用 `collect(Collectors.toList())` 将其转换为列表。
这样就能够根据属性对对象进行去重操作。如果要根据其他属性进行去重,只需将 `Person::getId` 替换为相应的属性访问方法即可。
阅读全文