2016-01-02 49 views
2

我工作的排行榜,我的數據存儲在一個ArrayList作爲你怎麼用數字

int + " " + username 

我一直在試圖對它進行排序,以顯示INT +字符串項的ArrayList排序。

public static void main (String[] args) throws java.lang.Exception 
{ 

    List<String> leaderboard = new ArrayList<String>(); 

    leaderboard.add("11 John"); 
    leaderboard.add("23 annie"); 
    leaderboard.add("1 putin"); 
    leaderboard.add("101 king"); 
    Collections.sort(leaderboard); 

    for(int i = 0; i < leaderboard.size(); i++) { 
     System.out.print(leaderboard.get(i)); 
     System.out.println(); 
    } 

} 

輸出字母排序:

1 putin 
101 king 
11 John 
23 annie 

,當我需要

1 putin 
11 John 
23 annie 
101 king 

,並完成它,我會用

Collections.reverse(leaderboard); 

要顯示它作爲一個高比分圖表。

+0

製作定製具有數字和名稱的對象作爲實例屬性。 –

+0

爲什麼拋出java.lang.Exception? –

回答

4

你可以創建一個自定義Comparator到數字處理字符串的第一部分:

public class NumericalStringComparator implements Comparator<String> { 
    @Override 
    public int compare (String s1, String s2) { 
     int i1 = Integer.parseInt(s1.split(" ")[0]); 
     int i2 = Integer.parseInt(s2.split(" ")[0]); 
     int cmp = Integer.compare(i1, i2); 
     if (cmp != 0) { 
      return cmp; 
     } 
     return s1.compareTo(s2); 
    } 
} 

然後,您可以用它來以相反的順序來排序您的收藏:

Collections.sort(leaderboard, new NumericalStringComparator().reversed()); 
+0

哇,這很快。完美的作品非常感謝! 使用他的代碼我得到正確的排序。 謝謝。接受5分鐘冷卻後回覆。欣賞它。 – user1028872

+0

這隻有當你需要將數據存儲爲字符串。你可能*不*。推薦的解決方案是使用'Map '(而不是當前的'List')將'names'映射到它們各自的'scores';或創建一個有效地執行相同的「鍵值」配對的自定義對象。這是爲了避免將數字存儲爲字符串(內存效率低下),並且必須將它們解析爲字符串(cpu-inefficient) – XenoRo