2015-01-17 34 views
0

你好,我必須從Java中的arraylist獲得最大數量。 ia m得到錯誤T-不在綁定的實現java內。朗。還有什麼其他的方法可以對arralist進行分類。這是我的代碼示例。最大數組列表編號

private void CreateHighestScorePlayer(LinearLayout layoutForHighScore) { 
    HighScoreManager highScoreManager = HighScoreManager.getInstance(getApplicationContext()); 
    ArrayList<Score> scores = highScoreManager.getScore(); 
    Collections.sort(scores); 
    scores.get(scores.size() -1); 

} 
+0

您需要爲Score類定義一個自定義比較器。 –

+0

我知道它有任何其他的排序方式 – user3826166

+0

不可以。「Score」類必須是「Comparable」,或者你必須提供一個「Comparator」。 Java不知道如何自己對類進行排序。它應該如何分類,在哪些領域?你必須通過實現「Comparable」或傳遞一個自定義的「比較器」來告訴它。那有什麼問題? –

回答

1

如果你想獲得最大元素,你應該使用Collections.max方法。它有一個將自定義比較器作爲參數的版本。

事情是這樣的:

Score result = Collections.max(scores, new Comparator<Score>() { 
    @Override 
    public int compare(Score score1, Score score2) { 
     // Compare them here 
    } 
}); 
+0

Collection.max同一問題 – user3826166

+0

@ user3826166您是否正在使用比較器的版本? – kraskevich

3

Collections.sort是具有以下特徵的一般方法:

public static <T extends Comparable<? super T>> void sort(List<T> list) 

這意味着您必須作爲參數傳遞一個List<T>,其中T延伸Comparable<? super T>

所以,你有兩種解決方法,你可以把你Score類爲

class Score implements Comparable<Score> { 

    public int compareTo(Score other) { 
    ... 
    } 
} 

或者你可以通過自定義Comparator爲你的分數類中使用Collection.sort(List<T>, Comparator<? super T> c)

假設您可以控制Score類,第一種解決方案會更好,因爲它會給出得分與其他得分自然排序的特徵。

2

您需要讓您的Score對象實施Comparable,然後在您的ArrayList上致電Collections.max。或者您可以使用Comparator來呼叫max的重載版本。無論哪種方式,你的代碼都需要知道什麼使得一個對象變大,變小或等於另一個。

我們實際上在ComparableComparator上創建了一個帶有示例代碼的視頻教程,您可以找到here。關鍵是要了解兩者在決定使用哪個方面的區別。

0

如果你只是想找到最高分數,你可以使用一個簡單的Java 8構造。如果您Score類看起來像下面這樣:

public static class Score { 
    private final int score; 

    Score(int score) { 
     this.score = score; 
    } 

    public int getScore() { 
     return score; 
    } 
} 

然後,您可以streamList<Score>這樣的:

List<Score> scores = 
     Arrays.asList(new Score(100), new Score(200), new Score(50)); 

final Optional<Score> max = 
     scores.stream().max((score1, score2) -> Integer.compare(score1.getScore(), score2.getScore())); 

if (max.isPresent()) { 
    Score score = max.get(); 

    // Do stuff 
} else { 
    // Handle when there are no scores 

} 

這也採用了Comparator在一些其他的答案描述。 Comparator構建爲這樣的lamdba:

(score1, score2) -> Integer.compare(score1.getScore(), score2.getScore())