你好我必须从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);
}
答案 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
对象变得更大,更小或等于另一个。
我们实际上创建了一个视频教程,其中包含Comparable
和Comparator
上的示例代码,您可以找到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())