2015-10-17 97 views
2

這是我的問題。按對象的變量對對象的LinkedList進行排序

我有一個LinkedList的對象,它們有一個字符串名稱和一個int分數值。

現在我需要根據得分值以降序對這個列表進行排序。

我該怎麼做?我試着用Collections.sort(List),但這不適用於對象。

如何告訴java使用分數作爲比較值?

+0

你的意思是你有'''LinkedHashMap'''? LinkedList沒有K,V對。 – Siddhartha

+1

Collections.sort有一個可以通過比較器的版本。 http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List,%20java.util.Comparator) –

+0

我不(?)這個將是我第一次對列表進行排序,就像我以前使用陣列一樣,所以我是一個新手。 Highschool高級,如果這給出了任何參考我對Java的瞭解程度如何 – John

回答

4

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}] 
+0

謝謝! – John

0

Collections.sort(List)作品Objects只要Objects媲美彼此既可以通過java.lang.Comparablejava.util.Comparator。既然你Objects需要自定義排序,你需要實現一個比較

Collections.sort(list,new Comparator(){ 
    @Override 
    public int compare(MyObject obj1,MyObject obj2){ 
     return obj2.score - obj1.score; 
    } 
}); 
2

隨着其他的答案,這裏是一個整潔的Java 8解決方案:

Collections.sort(list, Comparator.comparingInt(obj -> obj.score).reversed()); 

reversed()是降序排列,這對由obj.score

正如Iaune指出的,如果您正確使用Encapsulationobj -> obj.score可以替換爲ObjType::getScore

+1

也許obj。getScore()或WhateverTheClassIsCalled :: getScore,假設這些字段不是公共的 - 它們不應該是;-)。 +1這個整潔的定義。 – laune

+0

@Downvoter,請留下解釋與我的答案問題的意見,所以我可以解決它。 – bcsb1001

+0

不是我,但看到我的評論。 – laune

相關問題