我试图根据列和值对二维数组进行排序,但从未得到我想要的结果。
public class SortColl {
public static void main(String args[]){
String[][] multi = new String [][]{
{"Josef", "cool"},
{"Josef", "bat"},
{"zeta", "doen"},
{"zeta", "up"},
{"root", "local"},
{"root", "region"}
};
Arrays.sort(multi, new Comparator<String[]>(){
@Override
public int compare(String[] first, String[] second){
final String time1 = first[0];
final String time2 = second[0];
return time1.compareTo(time2);
}
});
for (int i=0; i< multi.length; i++){
String[] row = multi[i];
for(int j=0; j<row.length;j++){
System.out.println(" , " + row[j] );
}
}
}
}
对于上述内容,我想要得到的结果为
{"Josef", "bat"},
{"Josef", "cool"},
{"root", "local"},
{"root", "region"}
{"zeta", "doen"},
{"zeta", "up"},
有人可以指导我吗?
最佳答案
您可以使用Comparator函数,但您必须理解二维数组在内存中的表示方式。
String[][] multi = new String [][]{
{"Josef", "cool"},
{"Josef", "bat"},
{"zeta", "doen"}
};
这意味着 multi 是一个数组的数组。 multi 的第一个索引是一个包含“Josef”和“cool”内容的数组。第二个“约瑟夫”和“ bat ”。等等。
更直观:
multi ----> [ ][ ][ ]
| | |
| | \->["zeta", "doen"]
| |
| \-> ["Josef"]["bat"]
|
\-> ["Josef"]["cool"]
使用 Array.sort()
时,比较器接收一维数组作为参数。所以当参数是 String[] first, String[] second
时然后在内存中,你有(当 Array.sort()
函数执行第一步时)
first --> ["Josef"]["cool"]
second--> ["Josef"]["bat"]
因此,为了正确排序,您必须检查第一个元素。如果匹配,则检查第二个元素。因此,我调整了您的比较器类;
Arrays.sort(multi, new Comparator<String[]>(){
@Override
public int compare(String[] first, String[] second){
// compare the first element
int comparedTo = first[0].compareTo(second[0]);
// if the first element is same (result is 0), compare the second element
if (comparedTo == 0) return first[1].compareTo(second[1]);
else return comparedTo;
}
});
这应该可以完成工作。
关于java - java中的二维字符串数组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42813755/