java - java中的二维字符串数组排序

标签 java arrays

我试图根据列和值对二维数组进行排序,但从未得到我想要的结果。

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/

相关文章:

java - Mockito:基于另一个的模拟对象

c++ - 如何创建多个模板对象的数组

c++ - C++ 中高维数组动态内存分配的正确方法?

objective-c - Objective-C 中的可变长度参数

c - 数组元素交换函数

php - 从 Laravel 4 输入生成新数组

Java Collectors.groupingBy()---List 是有序的吗?

java - 将值添加到其他数组列表后覆盖数组列表中的旧值

java - 无法在 Java Eclipse 中创建新的 Android 应用程序

java - 使用 JdbcTemplate 访问多个数据源会导致错误