我有一个user实体, 字段有 String code, DateTime insterTime, 现在有一个list集合好含张三, 李四的多个相同的记录, 我想要最新的每个人的最新数据
时间: 2024-04-08 18:29:55 浏览: 84
你可以使用Java的Stream API和Collectors来实现获取每个用户的最新数据。以下是一个示例代码:
```java
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 示例User实体类
class User {
private String code;
private LocalDateTime insertTime;
public User(String code, LocalDateTime insertTime) {
this.code = code;
this.insertTime = insertTime;
}
public String getCode() {
return code;
}
public LocalDateTime getInsertTime() {
return insertTime;
}
}
// 示例User集合
List<User> userList = new ArrayList<>();
userList.add(new User("张三", LocalDateTime.parse("2022-01-01T10:00:00")));
userList.add(new User("李四", LocalDateTime.parse("2022-01-02T09:00:00")));
userList.add(new User("张三", LocalDateTime.parse("2022-01-01T12:00:00")));
userList.add(new User("李四", LocalDateTime.parse("2022-01-02T11:00:00")));
// 获取每个用户的最新数据
Map<String, User> latestUsers = userList.stream()
.collect(Collectors.toMap(User::getCode, user -> user,
(user1, user2) -> user1.getInsertTime().isAfter(user2.getInsertTime()) ? user1 : user2));
// 输出结果
latestUsers.values().forEach(user -> System.out.println(user.getCode() + ": " + user.getInsertTime()));
}
}
```
这段代码首先定义了一个示例的User实体类,包含字段`code`和`insertTime`分别表示用户代码和插入时间。
然后创建了一个示例的User集合`userList`,其中包含了多个相同用户的记录。
通过使用Stream API,我们使用`Collectors.toMap`方法将用户代码作为键,User对象作为值,并指定一个合并函数来选择最新的记录。合并函数比较两个记录的插入时间,选择插入时间较晚的记录作为最新记录。
最后,我们通过`values()`方法获取所有的最新User对象,并进行输出。
运行代码,你将得到每个用户的最新数据。输出结果示例:
```
张三: 2022-01-01T12:00
李四: 2022-01-02T11:00
```
在这个例子中,张三和李四分别有多条记录,我们筛选出了每个用户的最新数据。
阅读全文