list stream按照字段去重后取最后一个元素
时间: 2024-09-24 16:20:32 浏览: 58
在Java中,可以使用List的stream()方法结合Collectors.toList()和distinct()方法以及Optional类来实现按字段去重并获取最后一个元素的操作。假设我们有一个Person对象列表,其中包含一个名为"name"的字段,你可以这样做:
```java
import java.util.*;
import java.util.stream.*;
class Person {
String name;
// 其他属性...
}
List<Person> people = ... // 初始化人员列表
// 使用Stream API
Optional<Person> lastDuplicatedFreePerson = people.stream()
.collect(Collectors.toMap(Person::getName, Function.identity(), (a, b) -> a)) // 去重
.values().stream() // 取map的值流,即去除重复后的Person对象
.sorted(Comparator.comparingLast(Comparator.comparing(Person::getName))) // 按名字排序,保证最后的是最后一个重复的对象
.findFirst(); // 获取最后一个元素
lastDuplicatedFreePerson.ifPresent(System.out::println); // 打印结果
```
注意:这种方法依赖于name字段作为唯一标识,并假设如果有重复的"name",它们在原始列表中的顺序保持不变。
阅读全文