我需要根据Student对象中的日期对ArrayList进行排序...如果日期(加入日期)相同,那么我需要根据ID对其进行排序...怎么做?
答案 0 :(得分:3)
这可以通过两种常见方式完成。
简单方法
1)让学生提供可比较的实施,最终将推迟到日期。这是一个非常简单的操作,但它有点像黑客。
可维护的方式
2)或者,Collections.sort方法将Comparator作为输入 - 您可以轻松编写自定义比较器,通过将输入转换为Student类并直接返回数据比较来实现排序所需的比较。
第二种解决方案更加模块化和可维护,除非按日期比较是您应用程序的核心方面。
答案 1 :(得分:2)
在Student类中实现Comparable接口。然后用
Collections.sort(list);
答案 2 :(得分:1)
您可以执行以下操作:
使类实现Comparable
:
public class Student implements Comparable<Student> {
private Date joinDate;
private String id;
//...
@Override
public int compareTo(Student o) {
int result = joinDate.compareTo(o.joinDate);
if(result != 0) {
return result;
}
return id.compareTo(o.id);
}
}
或使用Comparator
:
Comparator<Student> comparator = new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int result = o1.getJoinDate().compareTo(o2.getJoinDate());
if (result != 0) {
return result;
}
return o1.getId().compareTo(o1.getId());
}
};
答案 3 :(得分:1)
Collections
类有一个排序方法,它以Comparator
为参数:
List<Student> students;
/* ...students list instantiated and populated somewhere along here... */
Collections.sort(students, new Comparator<Student>() {
@Override
public int compare(Student student1, Student student2) {
return student1.joinDate().compareTo(student2.joinDate());
}
});
我应该补充一点,如果您的列表确实被声明为Object
泛型,那么您将不得不进行大量的转换。该列表应声明为Student
的通用列表,并且您应该有其他非学生对象列表。
答案 4 :(得分:1)
您可以采取以下两种方式之一:
1)在对象上实现Comparable接口并调用`Collections.sort(yourList);'。
或者
2)将Comparator接口实现为一个新类(让我们假装你调用该类StudentDateComparator
。然后你可以调用Collections.sort(yourList,new StudentDateComparator());`。
我通常更喜欢后者,因为它允许我将排序代码与它排序的数据对象分开。
答案 5 :(得分:1)
如果Student类根据ID字段实现Comparable,请使用Collections.sort()并将列表作为单个参数。
否则,实现一个Comparator,使用它们的ID比较对象,并将其用作Collections.sort()的第二个参数。