Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java order arraylist字符串[]和#xA0;按数字_Java_Sorting_Collections_Types - Fatal编程技术网

java order arraylist字符串[]和#xA0;按数字

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

我有一个字符串[]类型的数组列表。我想按字符串[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 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,数组为空,或者它不是一个有效的整数。