【问题标题】:Sorting 2D array of strings in alphabetical order按字母顺序对字符串的二维数组进行排序
【发布时间】:2020-05-20 11:36:44
【问题描述】:

请帮忙,我在如何对两列中的字符串数组进行排序时遇到问题。 所以,我有两列:它们都包含一个字符串。我需要按字母顺序对第一列进行排序,而第二列不应该打乱,因此,它应该与排序后的第一列相对应。

谁能看到我需要在下面的代码中放置排序方法:

public static void main(String[] args) {
    String[][] emp = {
            {"Victor    ", "ZSA"},
            {"Fred    ", "HAN"},
            {"Drake   ", "SOL"},
            {"Albert  ", "TUR"},
            {"Eric    ", "CAN"}};

    System.out.println("String 1:    String 2: ");
    for (int i = 0; i < emp.length; i++) {
        for (int j = 0; j < emp[0].length; j++) {
            System.out.printf("%9s", emp[i][j]);
        }
        System.out.println();
    }
}

输出应该是:

Albert  TUR
Drake   SOL
Eric    CAN
Fred    HAN
Victor  ZSA

【问题讨论】:

    标签: java arrays sorting multidimensional-array


    【解决方案1】:

    您可以创建一个自定义比较器来实现接口Comparator,它将String[] 数组(数组2D 行)作为参数并比较两个数组的第一个元素,如下所示:

    public class CustomComparator implements Comparator<String[]> {
        @Override
        public int compare(String[] row1, String[] row2) {
            return row1[0].compareTo(row2[0]);
        }
    }
    

    在您可以在main 方法中执行排序之后:

    public static void main(String[] args) {
        String[][] emp = {
                {"Victor    ", "ZSA"},
                {"Fred    ", "HAN"},
                {"Drake   ", "SOL"},
                {"Albert  ", "TUR"},
                {"Eric    ", "CAN"}};
    
        Arrays.sort(emp, new CustomComparator());
    
        System.out.println("String 1:    String 2: ");
        for (int i = 0; i < emp.length; i++) {
            for (int j = 0; j < emp[0].length; j++) {
                System.out.printf("%9s", emp[i][j]);
            }
            System.out.println();
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用Arrays.sort(T[],Comparator)方法如下:

      String[][] emp = {
              {"Victor ", "ZSA"},
              {"Fred   ", "HAN"},
              {"Drake  ", "SOL"},
              {"Albert ", "TUR"},
              {"Eric   ", "CAN"}};
      
      // sort by first column alphabetically
      Arrays.sort(emp, Comparator.comparing(arr -> arr[0]));
      
      // output
      Arrays.stream(emp).map(Arrays::toString).forEach(System.out::println);
      
      [Albert , TUR]
      [Drake  , SOL]
      [Eric   , CAN]
      [Fred   , HAN]
      [Victor , ZSA]
      

      另见:
      How to sort by a field of class with its own comparator?
      How to use a secondary alphabetical sort on a string list of names?

      【讨论】:

        猜你喜欢
        • 2013-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-28
        相关资源
        最近更新 更多