java order arraylist字符串[]和#xA0;按数字
我有一个字符串[]类型的数组列表。我想按字符串[0]将其作为int进行排序。我有:java order arraylist字符串[]和#xA0;按数字,java,sorting,collections,types,Java,Sorting,Collections,Types,我有一个字符串[]类型的数组列表。我想按字符串[0]将其作为int进行排序。我有: Collections.sort(listitems, new Comparator<String[]>() { @Override public int compare(String[] lhs, String[] rhs) { return lhs[0].compareToIgnoreCase(rhs[0]); } }); Collections.sort(listitems,new
Collections.sort(listitems, new Comparator<String[]>() {
@Override
public int compare(String[] lhs, String[] rhs) {
return lhs[0].compareToIgnoreCase(rhs[0]);
}
});
Collections.sort(listitems,new Comparator(){
@凌驾
公共整数比较(字符串[]lhs,字符串[]rhs){
返回lhs[0]。compareToIgnoreCase(rhs[0]);
}
});
但是这个顺序是这样的:10
11
12
2
20
21
3
4
5
我尝试将
lhs[0]
和rhs[0]
转换为int
,但是int
类型没有任何类型的比较,我不确定需要返回哪种类型的int
,您的比较基于数字的字母顺序。要进行数字比较,请执行以下操作:
Integer.parseInt(lhs[0]) - Integer.parseInt(rhs[0]);
compare
的结果是:
- 如果第一个参数在逻辑上“小于”第二个参数,则为负值
- 如果第一个参数在逻辑上“大于”第二个参数,则为正
- 如果第一个参数在逻辑上等于第二个参数,则为零
@Override
public int compare(String[] lhs, String[] rhs) {
int leftInt = Integer.parseInt(lhs[0]);
int rightInt = Integer.parseInt(rhs[0]);
return leftInt < rightInt ? -1
: leftInt > rightInt ? 1
: 0;
}
@覆盖
公共整数比较(字符串[]lhs,字符串[]rhs){
int leftInt=Integer.parseInt(lhs[0]);
int rightInt=Integer.parseInt(rhs[0]);
返回leftIntrightInt?1
: 0;
}
Java1.7提供了有用的Integer.compare
方法,但我假设您无法使用该方法。您可以使用Integer.compareTo
,但这可能会在移动设备上产生超出您实际需要的垃圾
请注意,即使
leftInt
和rightInt
非常大,或者可能是负数,这种方法也会起作用-仅从一个值减去另一个值的解决方案假设减法不会溢出。我认为这应该可以为您解决问题,如果我们假设数组的内容是整数的字符串表示:
Collections.sort(listitems, new Comparator<String[]>() {
@Override
public int compare(String[] lhs, String[] rhs) {
return Integer.valueOf(lhs[0]).compareTo(Integer.valueOf(rhs[0]));
}
});
Collections.sort(listitems,new Comparator(){
@凌驾
公共整数比较(字符串[]lhs,字符串[]rhs){
返回Integer.valueOf(lhs[0]).compareTo(Integer.valueOf(rhs[0]);
}
});
您可以尝试Integer.parseInt(1hs[0])-Integer.parseInt(rhs[0])
或
int compareTo(整数-另一个整数)sytnax
或
解码(字符串nm)如果最终出现溢出,它将无法工作。例如,如果lhs[0]是“-2147483648”,而rhs[0]是“1”.Integer.parseInt(lhs);-您尝试解析一个数组-它在+1时不起作用,请注意,还必须确保每个数组都是非空的。int leftInt=Integer.parseInt(lhs[0]);int rightInt=Integer.parseInt(rhs[0])@保罗贝洛拉:哦,是的,所有的事情都可能出错,比如一个值为null,数组为空,或者它不是一个有效的整数。