2017-10-07 102 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

地產自定義對象的[排序的ArrayList可能的複製](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); 
    } 
} 

這是你可以對它進行排序:

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

這裏是一個文檔,這將有助於你:

Comparable

Comparator

0

考慮使用比較器。

經典一個

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

而且具有Java-8 LAMBDA支持

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

一個實施ComparablePlayerObject類並覆蓋compareTo方法的可行方法。

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

與Java 8,你可以這樣做的,沒有實現任何接口:

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

或者只是:

Collections.sort(allPlayers, Comparator.comparingInt(PlayerObject::getScore))