我有一个多维的String数组进程[100] [2],如下所示:
Y B
C D
A B
B C
F E
E Y
F D
Y X
E G
我想在第一个列字母上对其进行排序,以便最终结果看起来如此:
A B
B C
C D
E Y
E G
F E
F D
Y B
Y X. 我尝试过使用下面的代码,但这并不能解决问题:
Arrays.sort(process, new Comparator<String[]>() {
@Override
public int compare(final String[] entry1, final String[] entry2) {
final String time1 = entry1[0];
final String time2 = entry2[0];
return time1.compareTo(time2);
}
});
我得到的输出是:
A B
B C
C D
E Y
F E
Y B
E G
F D
Y X
答案 0 :(得分:1)
以下单元测试演示了一个有效的Comparator
实现。测试也打印出结果。
import java.util.Arrays;
import java.util.Comparator;
import junit.framework.TestCase;
public class ArrayTest extends TestCase {
public class Sorter implements Comparator {
public int compare(Object o1, Object o2){
String[] arrayOne = (String[])o1;
String[] arrayTwo = (String[])o2;
return arrayOne[0].compareTo(arrayTwo[0]);
}
}
public void testSort() {
String[][] testData = {
{"Y", "B"},
{"C", "D"},
{"A", "B"},
{"B", "C"},
{"F", "E"},
{"E", "Y"},
};
Arrays.sort(testData, new Sorter());
String[][] expectedOutput = {
{"A", "B"},
{"B", "C"},
{"C", "D"},
{"E", "Y"},
{"F", "E"},
{"Y", "B"},
};
for(int i = 0; i < testData.length; ++i) {
System.out.println(testData[i][0] + " " + testData[i][1]);
assertEquals(expectedOutput[i][0], testData[i][0]);
assertEquals(expectedOutput[i][1], testData[i][1]);
}
}
}
答案 1 :(得分:1)
此代码(相同的比较器)按预期工作:
String[][] arr = {{"B","L"},{"C","M"},{"Z","N"}};
Arrays.sort(arr, new Comparator<String[]>() {
@Override
public int compare(final String[] entry1, final String[] entry2) {
final String time1 = entry1[0];
final String time2 = entry2[0];
return time1.compareTo(time2);
}
});
你的问题必须在其他地方。
答案 2 :(得分:0)
最好将每个字符放在每行的相同元素中。然后,当您需要单独的字符时,请使用
String firstCharacter = myString.charAt(0);
String secondCharacter = myString.charAt(1);
你可以随意对你的一维数组进行排序。