我正在尝试根据每个对象中存在的长整数值对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);
}
};
请告诉我我在第一段代码中遗漏的内容,这些代码阻止我正确排序对象。
谢谢!
答案 0 :(得分:3)
从标题我假设Customer.sin
是long
- 问题是你试图将它们比作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 ......
这可以解释你的问题。