需要为特定字段排序ArrayList <object>吗?</object>

时间:2011-12-23 19:44:19

标签: java sorting arraylist

我需要根据Student对象中的日期对ArrayList进行排序...如果日期(加入日期)相同,那么我需要根据ID对其进行排序...怎么做?

6 个答案:

答案 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)

  1. 如果Student类根据ID字段实现Comparable,请使用Collections.sort()并将列表作为单个参数。

  2. 否则,实现一个Comparator,使用它们的ID比较对象,并将其用作Collections.sort()的第二个参数。