我有这个二维字符串数组。
2 10 BakerSarah D
2 11 SmothersSally A
2 12 SillySall C
2 13 Viper B
2 5 LouieChef B
2 6 Lawson C
每列都是字符串。现在我想在第二列上对此进行排序。我试过这段代码
void sortarray(final int index){
Arrays.sort(data, new Comparator<Object[]>(){
@Override
public int compare(Object[] o1, Object[] o2) {
String[] a = (String[])o1;
String[] b = (String[])o1;
return a[index].compareTo(b[index]);
}
});
}
但这是在
中排序 2 10 BakerSarah D
2 11 SmothersSally A
2 12 SillySall C
2 13 Viper B
2 5 LouieChef B
2 6 Lawson C
按顺序。为什么这样 ?? 如何更改它以排序
2 5 LouieChef B
2 6 Lawson C
2 10 BakerSarah D
2 11 SmothersSally A
2 12 SillySall C
2 13 Viper B
答案 0 :(得分:1)
当比较返回0(即它们相等)时,您需要在另一个索引上进行比较。我已经更新了你的代码以获得这个新索引 - index2。
void sortarray(final int index, final int index2){
Arrays.sort(data, new Comparator<Object[]>(){
@Override
public int compare(Object[] o1, Object[] o2) {
String[] a = (String[])o1;
String[] b = (String[])o1;
Integer i = a[index].compareTo(b[index]);
if (i == 0) {
return a[index2].compareTo(b[index2]);
}
return i;
}
});
}
我假设(可能不正确)您要对第一列进行排序,然后对第二列进行排序。如果它只是第二个,那么试试@ x4rf41所说的并做一个Integer.valueOf将字符串转换为整数
就个人而言,我会创建一个对象并在其上实现Comparator,以便您可以更加OO方式进行排序。
答案 1 :(得分:1)
字符串具有自然的词典顺序。这意味着“10”出现在“5”之前。整数具有自然的数字顺序。因此,您应该将字符串转换为数字并比较数字:
Arrays.sort(data, new Comparator<Object[]>(){
@Override
public int compare(Object[] o1, Object[] o2) {
String[] a = (String[])o1;
String[] b = (String[])o1;
if (index == 2) { // lexicographic order
return a[index].compareTo(b[index]);
}
else { // numeric order
int left = Integer.parseInt(a[index]);
int right = Integer.parseInt(b[index]);
return Integer.compare(left, right);
}
}
});
请注意,如果您使用的是适当的类,而不是使用String []来保存您的信息,则不会发生这种情况:
public class Row { // choose a better name
private int field1; // choose a better name
private int field1; // choose a better name
private String name;
// constructor and getters omitted
}
Java是一种OO语言。使用对象。