2017-05-27 37 views
1

我有一个对象列表List<Student>基于多个参数的对象列表排序

class Student { 
private String name; 
private Integer age; 
private Integer rank 

public String getName() { 
    return this.name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
public Integer getAge() { 
    return this.name; 
} 
public void setAge(Integer age) { 
    this.age = age; 
} 
public Integer getRank() { 
    return this.rank; 
} 
public void getRank(Integer rank) { 
    this.rank = rank; 
} 
} 

我有一个基于排名第一至排序列表,如果两个学生有同样的等级,然后根据他们的年龄,如果他们的年龄是相同的,然后根据他们的名字。

任何人都可以帮忙吗? 感谢

+1

可以创建一个'比较<学生,学生>'或'有落实Student'可比'',然后在那里定义你的比较逻辑。无论哪种方式,您都可以使用Java的内置排序功能。 – CollinD

回答

0

在java8你有.thenComparing(...)方法

Comparator< Student> studentComparator = Comparator.comparing(student -> student.name); 
comparator = comparator.thenComparing(Comparator.comparing(student -> student.age)); 
comparator = comparator.thenComparing(Comparator.comparing(student -> student.rank)); 

// Then pass this comparator in Collections#sort method 

Collecions.sort(studentList, studentComparator); Your list will be sorted 
1

您可以使用java8 lambda表达式

List<Student> students = new Arraylist<>(); 
... 
... 
... 
student.sort() 

students.sort(Comparator.comparing(Student::getName).thenComparing(Student::getAge)); 
+1

我想你的意思是java8,因为lamdas在Java8中引入,而'Student :: getName'在Java7中是非法的 – ADS

+0

哦,是的,对不起,这是我的错,我在编辑我的文章 –