3

我有一个字符串 [] 类型的数组列表。我想通过 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]and转换rhs[0]int,但int类型没有任何比较,我不确定int我需要返回什么类型

4

4 回答 4

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非常大,或者可能为负数,这也会起作用 - 仅从另一个值中减去一个值的解决方案假定减法不会溢出。

于 2012-04-10T10:58:38.033 回答
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]));
 }
});
于 2012-04-10T10:59:34.233 回答
1

您的比较是基于数字的字母顺序。要在数字上比较它们:

Integer.parseInt(lhs[0]) - Integer.parseInt(rhs[0]);
于 2012-04-10T10:56:20.433 回答
0

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

或者

int compareTo(Integer anotherInteger) 语法

或者

解码(字符串纳米)

于 2012-04-10T11:02:28.283 回答