2017-05-27 70 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

哦,是的,對不起,這是我的錯,我在編輯我的文章 –