最大数量arraylist

时间:2015-01-17 15:17:18

标签: java

你好我必须从Java中的arraylist获得最大数量。 我得到错误T-不在绑定工具java中。郎。可比较的是有任何其他方式来排序集会。这是我的代码示例。

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

}

4 个答案:

答案 0 :(得分: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) {
    ...
  }
}

或者,您可以通过为自己的分数类传递自定义Collection.sort(List<T>, Comparator<? super T> c)来使用Comparator

第一个解决方案更好,假设你可以控制Score类,因为它会给出一个得分特征,可以自然地与其他分数一起排序。

答案 1 :(得分:2)

您需要拥有Score对象工具Comparable,然后在ArrayList上致电Collections.max。或者,您可以使用max调用Comparator的重载版本。无论哪种方式,您的代码都需要知道是什么使一个Score对象变得更大,更小或等于另一个。

我们实际上创建了一个视频教程,其中包含ComparableComparator上的示例代码,您可以找到here。关键是要了解两者之间在决定使用哪个方面的区别。

答案 2 :(得分:1)

如果要获取最大元素,则应使用Collections.max方法。它有一个版本,它将自定义比较器作为参数。

这样的事情:

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

答案 3 :(得分:0)

如果您只是希望找到最高分,您可以使用简单的Java 8结构。如果您的Score课程类似于以下内容:

public static class Score {
    private final int score;

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

    public int getScore() {
        return score;
    }
}

然后,你可stream List<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())