2014-03-27 96 views
-1

我有一個對象陣列等如何對對象數組進行排序?

Player p[] = new Player[t]; 

而且每個對象具有一個整數變量和名稱變量。

public class Player { 
    public String player_name; 
    public int number; 
} 

從用戶獲得輸入後,我怎麼能根據它們的數量變量對這個對象數組進行排序?

+1

Ref。 HTTP://計算器。com/questions/2784514/sort-arraylist-of-custom-objects-by-property?rq = 1(這是一個List,然後參見[Arrays.sort](http://docs.oracle.com/javase/7) /docs/api/java/util/Arrays.html#sort(T[],%20java.util.Comparator))) – user2864740

+1

閱讀關於'Arrays.sort'和'比較器' –

+1

轉動你的眼睛在右邊,到「相關」部分,你會發現幾十個重複的問題。 –

回答

0

最簡單的方法是使Player實施Comparable<Player>,並執行內部PlayercompareTo(Player)方法:

public int compareTo(Player player) { 
    return this.number-player.number; 
} 

然後,無論你想排序數組,只需ca LL Arrays.sort(p);

+0

請注意,這可能不適用於大數目的負值。更好地使用'Integer.compare' – Puce

0

創建一個實現Comparator<Player>的類,稱爲PlayerComparator。通過創建一個需要兩個Playercompare method來實現該接口。根據第一個Player是否小於,等於或大於第二個Player,返回負數,零或正數。

然後,您可以創建您的PlayerComparator並將它(連同您的陣列)傳遞給Arrays.sort

1

使用Java SE 8嘗試像(未經測試):

Arrays.stream(p).sorted((p1, p2) -> Integer.compare(p1.number, p2.number)) .collect(Collectors.toList()) 

編輯

關於第二個想法,這可能是在這種情況下更有效,因爲它不創建一個新的數組/集:

Arrays.sort(p, (p1, p2) -> Integer.compare(p1.number, p2.number)); 
+0

用於在lambdas中進行思考的問題:) – mdm

0

讓你自定義的類實現Comparable接口,然後你可以使用Java集合排序喲烏爾陣列(Arrays.sort()功能)

public class Player implements Comparable<Player> { 
    public String player_name; 
    public int number; 

    @Override 
    public int compareTo(Player object) { 
     return this.player_name.compareTo(object.player_name); 
    } 
} 

排序

Player p[] = new Player[t]; 
// do stuff 
Arrays.sort(p); 
0

你需要對數可變吸氣這個工作,如:

public class Player { 
    public String player_name; 
    public int number; 

    public int getNumber() { 
     return number; 
    } 
} 

然後,如Java 8中,您可以通過使用Comparing工廠類對其進行排序:

Player[] p = new Player[t]; 
Arrays.sort(p, Comparator.comparingInt(Player::getNumber)); 

這將:

  • 創建Comparator<Person>,通過比較沒有getNumber方法。
  • 你在這裏看到的是一個方法參考,它是lambda p -> player.getNumber()的縮寫,它將玩家映射到數字。