java实用stream方式 list根据某个字段去重
时间: 2023-06-25 08:05:12 浏览: 239
可以使用Java 8中的Stream API来根据某个字段去重List。具体的实现方法可以参考以下代码:
假设我们有一个Person类,它有两个字段:id和name。
```java
public class Person {
private int id;
private String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
}
```
现在我们有一个List<Person>,我们想要根据id字段去重。可以使用以下代码:
```java
List<Person> persons = new ArrayList<>();
persons.add(new Person(1, "Alice"));
persons.add(new Person(2, "Bob"));
persons.add(new Person(1, "Charlie"));
persons.add(new Person(3, "David"));
List<Person> uniquePersons = persons.stream()
.collect(Collectors.toMap(Person::getId, Function.identity(), (p1, p2) -> p1))
.values()
.stream()
.collect(Collectors.toList());
```
首先,我们使用`Collectors.toMap()`方法将List转换为Map,其中key是id字段,value是Person对象本身。当出现重复的key时,我们使用第三个参数指定了如何处理重复的值,这里我们选择保留第一个值即可。
然后,我们调用Map的`values()`方法获取所有的value,并将其转换为Stream。
最后,我们再将Stream转换为List,即可得到去重后的结果。
注意,这种方法只能去除相同id的Person对象,如果需要根据其他字段去重,需要相应地更改代码。
阅读全文
相关推荐
















