2012-03-13 115 views
0

我有一個問題的第一元件上的2D數組列表,由此原始2D ArrayList中,排序之後,按以下格式輸出:排序基於嵌套數組列表

[639.5, 134, -2] 
[639.524, 131, -1] 
[640.478, 179, -2] 
[647.968, 192, -2] 
[649.068, 199, -2] 
[65.581, 3, -1] 
[66.387, 6, -1] 
[66.726, 7, -1] 
[660.182, 194, -1] 

,我想基於排序僅在第一列。因此,我預期的結果應該是這個:

[65.581, 3, -1] 
[66.387, 6, -1] 
[66.726, 7, -1] 
[639.5, 134, -2] 
[639.524, 131, -1] 
[640.478, 179, -2] 
[647.968, 192, -2] 
[649.068, 199, -2] 
[660.182, 194, -1] 

不知何故,Collections.sort()方法對列表進行排序,就好像它是一個字符串,因此「0」比我的大,不知道第一列是由「」雙重價值。任何人都可以幫助我嗎?謝謝!

+0

我們可以看到,您正在使用排序該數據的代碼?這將有所幫助。也許在[pastebin](http://www.pastebin.com)? – 2012-03-13 06:21:43

+0

這是原始未排序的2D數組列表:http://pastebin.com/aUaHaNdL請注意,每行都是父數組列表中的元素。每行有3個元素的數組列表。這就是我們如何獲得2D數組列表。在使用Collections.sort後,我結束了這個... http://pastebin.com/PaxjQQS2我在java中這樣做。 – 2012-03-13 06:31:01

+0

我更願意爲您創建,修改和排序列表的代碼,但這很有幫助。 :P最有可能的是,你最終不得不創建你自己的排序功能。 [這是一篇博客文章,有人似乎正在做你想做的事。](http://publicmind.in/blog/sorting-2d-array-java/) – 2012-03-13 06:33:31

回答

2

使用Double.compare()方法.... 通行證,在這種方法的第一列的值,將工作...

例如:

在主文件:

Collection.sort(arraylist variable,new PositionComparator()); 

其他類:

public class PositionComparator implements Comparator ArrayList<ArrayList> { 
    public int compare(ArrayList<ArrayList> o1, ArrayList<ArrayList> o2) { 
     double val1, val2; 
     val1 = Double.parseDouble(o1.get("your first value")); 
     val2 = Double.parseDouble(o2.get("your second value")); 
     return Double.compare(val1, val2); 
    } 
} 

希望這將有助於...

+0

我不確定你的意思是... – 2012-03-13 06:33:58

+0

請參閱編輯後的代碼... – 2012-03-13 06:37:46

+0

當談到hashmap和東西時,我幾乎是個白癡,你能看看我的代碼嗎?底部方法是我打算分類的地方。我在那裏刪除了我的非工作代碼。 http://pastebin.com/zpp1Zw1G – 2012-03-13 06:42:01

0

Collection.sort訂單列表中的自然順序,所以你可能想嘗試重寫的compareTo()方法

+0

是的,我讀了那個地方,我不知道如何去做你的建議:(我可以在excel中輕鬆做到這一點,但我寧願讓整個程序在java中運行,而不需要在excel中進行後期處理。 – 2012-03-13 06:34:40