我有一个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}}我需要返回
答案 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
,但这可能会产生比您在移动设备上真正想要的更多垃圾......
请注意,即使leftInt
和rightInt
非常大,或者可能是负数,这也会起作用 - 只是从另一个值中减去一个值的解决方案假定减法不会溢出。
答案 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)