java order arraylist string [] by number

时间:2012-04-10 10:55:06

标签: java sorting collections types

我有一个String []类型的数组列表。我想用String [0]作为int来命令它。我有这个:

Collections.sort(listitems, new Comparator<String[]>() {
 @Override
 public int compare(String[] lhs, String[] rhs) {
  return lhs[0].compareToIgnoreCase(rhs[0]);
 }
});

但这个顺序是这样的:
10
11
12
2
20
21
3
4
5
我试图将lhs[0]rhs[0]转换为int,但int类型没有任何比较,我不确定int是什么类型的{ {1}}我需要返回

4 个答案:

答案 0 :(得分:10)

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;
}

Java 1.7有一个有用的Integer.compare方法,但我认为你无法使用它。您可以使用Integer.compareTo,但这可能会产生比您在移动设备上真正想要的更多垃圾......

请注意,即使leftIntrightInt非常大,或者可能是负数,这也会起作用 - 只是从另一个值中减去一个值的解决方案假定减法不会溢出。

答案 1 :(得分:2)

如果我们假设数组的内容是整数的字符串表示,我认为这应该为你工作:

Collections.sort(listitems, new Comparator<String[]>() {
 @Override
 public int compare(String[] lhs, String[] rhs) {
  return Integer.valueOf(lhs[0]).compareTo(Integer.valueOf(rhs[0]));
 }
});

答案 2 :(得分:1)

您的比较基于数字的字母顺序。用数字比较它们:

Integer.parseInt(lhs[0]) - Integer.parseInt(rhs[0]);

答案 3 :(得分:0)

你可以尝试Integer.parseInt(1hs [0]) - Integer.parseInt(rhs [0]);

int compareTo(Integer anotherInteger)sytnax

decode(String nm)