2

リーグテーブルを表すと想定される3つの値を持つ10個のオブジェクトを保持する配列があるとします

Team1 20 5
Team2 21 6
Team3 21 8
Team4 23 8

最初の値 (ポイント) で並べ替え、次に 2 番目の値 (目標差) で並べ替えます。

Arrays.sort()compareto()をオーバーライドしてカスタム コードを記述すれば機能します。

もっと簡単な方法はありますか?リストなどに変換して?

4

3 に答える 3

9

を作成することComparatorが、これを解決する正しい方法です。その後、使用するかどうかはあなたArrays.sort()次第Collections.sort()です。

前者はリストへの変換を回避するため、望ましいと思います。

オブジェクトに実装することでこれを解決しないことをお勧めします。Comparableこれは表示の問題のように聞こえ、オブジェクト自体に並べ替え順序を埋め込むことはおそらく賢明ではありません。


(テストされていない)実装の例は次のとおりです。

public class ExampleComparator implements Comparator<YourObject> {

  public int compare(YourObject o1, YourObject o2) {
    if (o1 == null || o2 == null) {
      throw new NullPointerException();
    }

    if (o1.getValue1() != o2.getValue1()) {
      return Integer.compare(o1.getValue1(), o2.getValue1());
    }

    return Integer.compare(o1.getValue2(), o2.getValue2());
  }
}
于 2013-05-03T07:26:25.267 に答える
0

genericJavaには、複数のパラメーターでソートを実行できるものはありません。独自のソート アルゴリズムを実装するか、独自の を作成する必要がありますComparator。詳細については、この投稿をご覧ください。

于 2013-05-03T07:33:04.190 に答える