我正在一个Java项目上,该项目要求我实现具有以下描述的功能 obtainRanking():void :
通过使用Collections类中的类方法sort(List)对球员列表进行排序,Collections类是一种对集合对象进行排序的方法。为此,对象的类(在我们的例子中为Player)应实现接口“ Comparable”及其方法compareTo。
到目前为止,这就是我实现接口Comparable的方式:
package modeloqytetet;
public interface Comparable {
public int compareTo(Object otroJugador);
}
在类Player内部,这是我实现上述方法的方式:
@Override
public int compareTo(Object otherJugador) {
int otherCapital = ((Player) otherJugador).getCapital();
return otherCapital-getCapital();
}
现在,方法 obtainRanking():void 应该在其他类中实现,我不知道该怎么做。我一直在尝试通过在Internet上查找一些示例来弄清楚,但似乎没有任何效果。
任何帮助将不胜感激。
答案 0 :(得分:3)
说明告诉您实现java.lang.Comparable<T>
,而不是自己的Comparable
接口。
您应该这样做:
class Player implements Comparable<Player> {
@Override
public int compareTo(Player other) {
return Integer.compare(this.getCapital(), other.getCapital());
}
...
}
为什么不应该简单地从另一个整数中减去一个整数来进行比较,请参见here。
然后,您可以像这样实现obtainRankings
:
// this name is quite bad. I would call it sortPlayersCapitalInPlace or something like that
public void obtainRankings(List<Player> players) {
Collections.sort(players);
}
答案 1 :(得分:0)
您可以在getRankings()方法中使用以下代码段进行自定义排序。
对于玩家的升序,
public static void obtainRankings(List<Player> list){
Collections.sort(list, (pl1, pl2) -> {
return ((pl1.getCapital() > pl2.getCapital()) ? 1 : -1);
});
}
对于玩家降序,
public static void obtainRankings(List<Player> list){
Collections.sort(list, (pl1, pl2) -> {
return ((pl1.getCapital() > pl2.getCapital()) ? -1 : 1);
});
}