基于Long的值对ArrayList进行排序

时间:2012-10-22 22:44:42

标签: java sorting collections arraylist

我正在尝试根据每个对象中存在的长整数值对ArrayList进行排序。在关注互联网的各种例子之后,我提出了以下代码,但它没有按照需要排序(它似乎截断了对象的部分)。

public static Comparator<Customer> compareSIN = 
         new Comparator<Customer>() {
            public int compare(Customer cust1, Customer other) {
               String sin1 = "" + cust1.sin;
               String sin2 = "" + other.sin;
               return sin1.compareTo(sin2);
            }
         };

请告诉我我在第一段代码中遗漏的内容,这些代码阻止我正确排序对象。

谢谢!

3 个答案:

答案 0 :(得分:3)

从标题我假设Customer.sinlong - 问题是你试图将它们比作String而不是它们的数值。

(示例:10000在字典上小于2 - 所以在这里使用String是错误的)

你应该使用Long.compare()(假设java 7):

public static Comparator<Customer> compareSIN = 
         new Comparator<Customer>() {
            public int compare(Customer cust1, Customer other) {
               return Long.compare(cust1.sin,other.sin);
            }
         };

答案 1 :(得分:2)

您实际上不需要在自己的compareTo()方法中使用compareTo()方法。

比较状态,如果它们相等则必须返回0,不相等则为负数或正数。

出于这个原因,你可以通过返回从另一个减去的一个来比较两个长。

public int compare(Customer cust1, Customer other) {
           return cust1.sin - other.sin;
}

如您所见,如果 other.sin 大于 cust1.sin 则返回0,如果 cust1.sin 则返回0,如果 cust1则返回肯定。 sin 大于 other.sin

答案 2 :(得分:0)

您比较String而不是long s。

所以,想象一下你要比较:“10”和“5”,结果将是“10”&lt; “5”虽然认为您正在使用long,但您希望得到 10&gt; 5 ......

这可以解释你的问题。