2011-07-16 19 views
4

スポーツに基づいたさまざまなタイプのプレーヤーの配列リストがあります。 ArrayList内のプレイヤーのリストを姓で並べ替える必要があります。 2人のプレイヤーが同じ姓を持っている場合は、その2人のプレイヤーをファーストネームでソートする必要があります。 例:フォーマット姓のファーストネーム ウィリアムズ、ロバート フィリップスウォーレン Doeのジョン フィリップスマークJavaの姓と名でオブジェクトのArrayListを並べ替える

出力は、私は今のいずれかによってのみ並べ替えを持って何ロバート

Doeのジョン フィリップスマーク フィリップス・ウォーレン ウィリアムズする必要があります最初または最後に私のコードで最後のatmでそれを持っています。

public static void sortPlayers(ArrayList playerList) { 
    for (int i = 0; i < playerList.size(); i++) { 
     for (int j = 0; j < playerList.size(); j++) { 
      Collections.sort(playerList, new Comparator() { 

       public int compare(Object o1, Object o2) { 
        PlayerStats p1 = (PlayerStats) o1; 
        PlayerStats p2 = (PlayerStats) o2; 
        return p1.getPlayerLastName().compareToIgnoreCase(p2.getPlayerLastName()); 
       } 
      }); 
     } 

    } 
} 

答えて

14

変更がコンパレータ:

  public int compare(Object o1, Object o2) { 
       PlayerStats p1 = (PlayerStats) o1; 
       PlayerStats p2 = (PlayerStats) o2; 
       int res = p1.getPlayerLastName().compareToIgnoreCase(p2.getPlayerLastName()); 
       if (res != 0) 
        return res; 
       return p1.getPlayerFirstName().compareToIgnoreCase(p2.getPlayerFirstName()) 
      } 
+0

ネストされたループを取り除きます。 Collections.sortはあなたのためにすべての仕事をします – dfb

+0

結局おかげで束はついに叶う – Jeremy

+0

問題はありません。それがうまくいけばそれを受け入れるかもしれない –

4

ペタルの答えは、ちょうど2つの発言が正しいです:

  • 利用Listの代わりに、メソッドの引数としてArrayList、インターフェースがより一般的であるとして、別のListタイプ(LinkedList ...など)に変更しても、このメソッドは機能します
  • ジェネリックを使用してコードの型をより安全にします。

改良版:java8を使用して

//the place where you define the List 
List<PlayerStats> playerList = new ArrayList<PlayerStats>(); 


public static void sortPlayers(List<PlayerStats> playerList) { 
    Collections.sort(playerList, new Comparator<PlayerStats>() { 
     public int compare(PlayerStats p1, PlayerStats p2) { 
      int res = p1.getPlayerLastName().compareToIgnoreCase(p2.getPlayerLastName()); 
      if (res != 0) 
       return res; 
      return p1.getPlayerFirstName().compareToIgnoreCase(p2.getPlayerFirstName()) 
     } 
    }); 
} 
1

そこにこれを行う簡単な方法は次のとおりです。また、

public List<PlayerStats> getSortedPlayerList(List<PlayerStats> playerList) { 
    return playerList.stream().sorted(Comparator.comparing(PlayerStats::getPlayerLastName).thenComparing(PlayerStats::getPlayerFirstName)).collect(Collectors.toList()); 
} 
関連する問題