对类的对象进行排序

时间:2018-10-21 11:31:34

标签: java

我正在一个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上查找一些示例来弄清楚,但似乎没有任何效果。

任何帮助将不胜感激。

2 个答案:

答案 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);
        });
    }