2017-10-07 11 views
0

私は作成したいスコアシステムを持っています。そこにはスコアの高い順から低い順にプレイヤーのリストがあります。ArrayListオブジェクトの特定の値を使用してArrayListをソートしますか?

マイPlayerObject.classクラス:

public class PlayerObject { 

    private String playerName; 
    private int playerScore; 

    public int getScore() { 
     return this.playerScore; 
    } 

    public String getName() { 
     return this.playerName; 
    } 

    public void setNameAndScore(String givenName, int givenScore) { 
     this.playerName = givenName; 
     this.playerScore = givenScore; 
    } 

} 

マイアレイ:

ArrayList<PlayerObject> allPlayers = new ArrayList<PlayerObject>(); 

私は彼らのplayerScore属性に基づいて、配列リスト内の各選手を並べ替えることができますどのように任意のアイデア?

ありがとうございます!

+0

可能な複製](https://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects-by-property) – Zabuza

答えて

2

できることはたくさんあります。まず、これはPlayerObjectクラスです:

public class PlayerObject implements Comparable<PlayerObject> { 
    private String playerName; 
    private int playerScore; 

    public PlayerObject(String playerName, int playerScore) { 
     this.playerName = playerName; 
     this.playerScore = playerScore; 
    } 

    public String getPlayerName() { 
     return playerName; 
    } 

    public int getPlayerScore() { 
     return playerScore; 
    } 

    @Override 
    public int compareTo(PlayerObject o) { 
     return Integer.compare(playerScore, o.playerScore); 
    } 
} 

そして、これはあなたがそれを並べ替えることができる方法です。

Comparable

Comparator

:ここ

public class Main { 
    public static void main(String[] args) { 
     System.out.println("Hello World!"); 

     List<PlayerObject> players = new ArrayList<>(2); 
     players.add(new PlayerObject("player1", 2)); 
     players.add(new PlayerObject("player2", 4)); 

     // if PlayerObject implements Comparable<PlayerObject> 
     Collections.sort(players); 
     // or if you want explicit Comparator 
     players.sort(new Comparator<PlayerObject>() { 
      @Override 
      public int compare(PlayerObject o1, PlayerObject o2) { 
       return Integer.compare(o1.getPlayerScore(), o2.getPlayerScore()); 
      } 
     }); 
     // or you can use lambda if you use Java 8 
     players.sort((o1, o2) -> Integer.compare(o1.getPlayerScore(), o2.getPlayerScore())); 
     // or even more concise 
     players.sort(Comparator.comparingInt(PlayerObject::getPlayerScore)); 
    } 
} 

がお手伝いしますドキュメントです

0

コンパレータの使用を検討してください。 1

Collections.sort(allPlayers, new Comparator<PlayerObject>() { 
    @Override 
    public int compare(PlayerObject p1, PlayerObject p2) { 
     return p1.getScore().compareTo(p2.getScore()); 
    } 
}); 

およびJava 8のラムダサポートPlayerObjectクラスでComparableを実装し、compareToメソッドをオーバーライドするために可能な方法の

allPlayers.sort(
     (PlayerObject p1, PlayerObject p2) -> p1.getScore().compareTo(h2.getScore())); 
1

一つクラシック

allPlayers = allPlayers.stream() 
    .sorted(Comparator.comparingInt(PlayerObject::getScore)) 
    .collect(Collectors.toList()); 

それとも:javaの8で

public class PlayerObject implements Comparable<PlayerObject> { 

    ... 
    ... 
    @Override 
    public int compareTo(PlayerObject o) { 
    // You can interchange the return value (-1 and 1) to change the sorting order 

     if(getPlayerScore() > o.getPlayerScore()) 
     { 
      return -1 
     } 
     else if(getPlayerScore() < o.getPlayerScore()) 
     { 
      return 1; 
     } 
     return 0; 
    } 
} 
1

は、あなたが任意のインターフェイスを実装せず、そのように行うことができます

Collections.sort(allPlayers, Comparator.comparingInt(PlayerObject::getScore)) 
プロパティによって、カスタムオブジェクトの[ソートのArrayListの
関連する問題