在Java中,可以使用Stream
API结合Collectors.toMap
来对List<Student>
进行去重处理,确保每个学生名称只保留创建时间最大的一条记录。
假设Student
类如下:
import java.time.LocalDateTime;
public class Student {
private String name;
private LocalDateTime creationTime;
public Student(String name, LocalDateTime creationTime) {
this.name = name;
this.creationTime = creationTime;
}
public String getName() {
return name;
}
public LocalDateTime getCreationTime() {
return creationTime;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", creationTime=" + creationTime +
'}';
}
}
以下是根据学生名称去重的代码示例:
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student("Alice", LocalDateTime.of(2023, 1, 1, 10, 0)));
students.add(new Student("Bob", LocalDateTime.of(2023, 1, 1, 11, 0)));
students.add(new Student("Alice", LocalDateTime.of(2023, 1, 2, 9, 0)));
students.add(new Student("Charlie", LocalDateTime.of(2023, 1, 3, 12, 0)));
students.add(new Student("Bob", LocalDateTime.of(2023, 1, 2, 10, 0)));
// 根据学生名称去重,保留创建时间最大的一条记录
List<Student> uniqueStudents = students.stream()
.collect(Collectors.toMap(
Student::getName, // 以学生名称作为键
student -> student, // 以学生对象作为值
(existing, replacement) -> replacement.getCreationTime().isAfter(existing.getCreationTime()) ? replacement : existing // 若键重复,保留创建时间较大的记录
))
.values()
.stream()
.collect(Collectors.toList());
uniqueStudents.forEach(System.out::println);
}
}
关键点
-
Collectors.toMap
方法:- 第一个参数:
Student::getName
,以学生名称作为键。 - 第二个参数:
student -> student
,以学生对象作为值。 - 第三个参数:
(existing, replacement) -> replacement.getCreationTime().isAfter(existing.getCreationTime()) ? replacement : existing
,若键重复,保留创建时间较大的记录。
- 第一个参数:
-
.values()
方法获取去重后的学生对象集合。 -
最终转换为
List<Student>
进行输出。
通过这种方式,可以根据学生名称进行去重,并保留创建时间最大的一条记录。