import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
class Student {
String name;
// 其他属性...
public Student(String name) {
this.name = name;
}
// getter and setter methods...
}
public class Main {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student("张三"));
students.add(new Student("李四"));
students.add(new Student("张三"));
students.add(new Student("李四"));
students.add(new Student("王二麻子"));
List<Student> distinctStudents = students.stream()
.collect(Collectors.collectingAndThen(
Collectors.toMap(Student::getName, student -> student, (s1, s2) -> s1),
map -> new ArrayList<>(map.values())
));
// 打印去重后的学生姓名
distinctStudents.forEach(student -> System.out.println(student.getName()));
}
}
用Collectors.toMap()
方法来构建一个Map,其中键是学生的姓名,值是学生对象。如果有重复的姓名,toMap
方法提供了一个合并函数来决定如何处理重复的键:在这里我们选择了保留第一个学生对象。最后,我们将Map的值集转换为一个List。这样,输出的distinctStudents
List中的学生对象将根据姓名唯一。
不想重写对象equals()方法的可以试试