這是我的問題。按對象的變量對對象的LinkedList進行排序
我有一個LinkedList
的對象,它們有一個字符串名稱和一個int分數值。
現在我需要根據得分值以降序對這個列表進行排序。
我該怎麼做?我試着用Collections.sort(List),但這不適用於對象。
如何告訴java使用分數作爲比較值?
這是我的問題。按對象的變量對對象的LinkedList進行排序
我有一個LinkedList
的對象,它們有一個字符串名稱和一個int分數值。
現在我需要根據得分值以降序對這個列表進行排序。
我該怎麼做?我試着用Collections.sort(List),但這不適用於對象。
如何告訴java使用分數作爲比較值?
的Collections.sort
方法接受一個比較器作爲其第二個論點。 您可以傳入一個比較器來定義所需的順序。 例如給予Person
類:
class Person {
private final String name;
private final int score;
Person(String name, int score) {
this.name = name;
this.score = score;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", score=" + score +
'}';
}
}
可以使用Collections.sort
使用自定義比較的降序得分次序像這樣的人進行排序:
List<Person> list = new LinkedList<>(Arrays.asList(new Person("Jack", 3), new Person("Mike", 9)));
System.out.println("before: " + list);
Collections.sort(list, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o2.score - o1.score;
}
});
System.out.println("after: " + list);
這將輸出:
before: [Person{name='Jack', score=3}, Person{name='Mike', score=9}] after: [Person{name='Mike', score=9}, Person{name='Jack', score=3}]
謝謝! – John
Collections.sort(List)
作品Objects
只要Objects
媲美彼此既可以通過java.lang.Comparable
或java.util.Comparator
。既然你Objects
需要自定義排序,你需要實現一個比較
Collections.sort(list,new Comparator(){
@Override
public int compare(MyObject obj1,MyObject obj2){
return obj2.score - obj1.score;
}
});
隨着其他的答案,這裏是一個整潔的Java 8解決方案:
Collections.sort(list, Comparator.comparingInt(obj -> obj.score).reversed());
的reversed()
是降序排列,這對由obj.score
。
正如Iaune指出的,如果您正確使用Encapsulation,obj -> obj.score
可以替換爲ObjType::getScore
。
你的意思是你有'''LinkedHashMap'''? LinkedList沒有K,V對。 – Siddhartha
Collections.sort有一個可以通過比較器的版本。 http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List,%20java.util.Comparator) –
我不(?)這個將是我第一次對列表進行排序,就像我以前使用陣列一樣,所以我是一個新手。 Highschool高級,如果這給出了任何參考我對Java的瞭解程度如何 – John