list stream流根据某个字段去重 取最后一个元素
时间: 2023-11-12 15:09:17 浏览: 150
可以使用Java 8中的Stream API来实现。具体步骤如下:
1. 首先,使用`distinct()`方法根据某个字段进行去重。
2. 接着,使用`sorted()`方法按照该字段进行排序,以便取最后一个元素。
3. 最后,使用`reduce()`方法将整个流缩减为一个元素,取其中的最后一个元素。
例如,假设我们有一个`List`对象,其中包含一些`Person`对象,每个`Person`对象都有一个名字和年龄属性。我们想要根据名字进行去重,并且取年龄最大的那个人,可以按照以下方式实现:
```java
List<Person> people = ... // 初始化List
Person latestPerson = people.stream()
.distinct() // 根据名字去重
.sorted(Comparator.comparing(Person::getName).thenComparing(Person::getAge).reversed()) // 按照名字和年龄进行排序
.reduce((first, second) -> second) // 取最后一个元素
.orElse(null); // 如果流为空,则返回null
System.out.println(latestPerson.getName() + " is the latest person with age " + latestPerson.getAge());
```
上面的代码定义了一个名为`latestPerson`的变量,它是通过对`people`列表进行流处理得到的。首先,用`distinct()`方法对名字进行去重;然后,使用`sorted()`方法按照名字和年龄进行排序,以便取最后一个元素;最后,使用`reduce()`方法将整个流缩减为一个元素,并取得其中的最后一个元素。如果流为空,则返回null。最后,将`latestPerson`的名字和年龄打印出来。
阅读全文