2 回答
TA贡献1862条经验 获得超7个赞
您使用另Collections.sort一种方法:sort(List<T> list, Comparator<? super T> c)
你像这样使用它:
Collections.sort(classRoll, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
return s1.getName().compareTo(s2.getName());
}
});
在 Java 8+ 中,它更容易:
// Sort by name
classRoll.sort(Comparator.comparing(Student::getName));
// Sort by GPA
classRoll.sort(Comparator.comparingDouble(Student::getGpa));
如果名称是 2 个字段(firstName和lastName),则可以使用thenComparing:
// Sort by last name, then first name
classRoll.sort(Comparator.comparing(Student::getLastName)
.thenComparing(Student::getFirstName));
TA贡献1895条经验 获得超7个赞
这样做的方法是使用Collections.sort自定义比较器:
Comparator<Student> nameComparator = new Comparator<Student>() {
public int compare(Student student1, Student student2) {
return student1.getName().compareTo(student2.getName());
}
};
Comparator<Student> gpaComparator = new Comparator<Student>() {
public int compare(Student student1, Student student2) {
return student1.getGPA().compareTo(student2.getGPA());
}
};
然后您可以根据需要使用不同的比较器:
Collections.sort(classRoll, nameComparator);
通过这种方式,与上面具有 2 个循环的解决方案相比,您拥有一个优化的分拣机。
添加回答
举报