2012-03-13 120 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