按两个属性对对象排序

时间:2016-03-16 11:19:50

标签: java comparator comparable

假设我有一个学生名单:fx.erl。学生班看起来像这样:

ArrayList<Student> student = new ArrayList<>();

我想按名称排序该列表,但如果名称相同,我想在年龄之后对其进行排序。我怎么能用Java做到这一点。

有了这个,我可以按名称排序:

public class Student {
    String name;
    int age;
    String hobby;

    //getter and Setter methods below
}

因此,如果它们具有相同的名称,我怎样才能在年龄之后对其进行排序? 最后,我想对public class MyComparator implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { if(o1.getName() > o2.getName()){ return 1; } else if(o1.getName() < o2.getName()) { return -1; } else{ return 0; } } } 进行排序。

1 个答案:

答案 0 :(得分:3)

这应该有效:

dt <- data.table(category=c("A","A","A","B","B","C"))
dt2 <- dt
dt$count <- nrow(dt2[dt2$category == dt$category])

您还可以public class StudentsComparator implements Comparator<Student> { @Override public int compare(Student s1, Student s2) { final int nameComparison = s1.getName().compareToIgnoreCase(s2.getName()); if (nameComparison != 0) { return nameComparison; } return Integer.compare(s1.getAge(), s2.getAge()); } } 进行比较:

Student