2

同等のインターフェースを使用して、オブジェクトの ArrayList をソートしようとしています:

public class Unit implements Comparable<Unit>{
    // attributes
    int position;
    @Override
    public int compareTo(Unit other) {
        return Integer.compare(position, other.position);
    }
}

次に、次を使用して ArrayList を並べ替えます。

List<Unit> units = getAllUnits();
Collections.sort(units);

上記はすべてのユニットの開始をソートしますが、のデフォルト値が であるため、position 0これを開始したいです。position 1positionzero

compareToメソッドを変更するにはどうすればよいですか?

4

1 に答える 1

3

(コメントの情報を使用して、負の数がないことを確認してください)これを使用できるはずです:

public int compareTo(Unit other) {
    if (position != other.position) {
        if (position == 0) {
            return 1;
        } else if (other.position == 0) {
            return -1;
        }
        return Integer.compare(position, other.position);
    } else {
        return 0;
    }
}

更新:負の数でも機能します。出力例:[-1, 1, 2, 0, 0]

于 2013-07-15T15:02:49.570 に答える