簡體   English   中英

如何按Java中的第3列按升序對2D數組排序?

[英]How do you sort a 2D array in ascending order by the 3rd column in java?

我的代碼旨在對員工列表進行排序,首先按部門(第一列)排序,然后按年齡(第三列)升序排序。 我搜索了幾個小時都無濟於事。 到目前為止,我的代碼:

    public class Company
    {
    public static void main(String[] args)
    {
        String[][] departmentList = new String[13][3];
            departmentList[0][0] = "Accounting";
            departmentList[0][1] = "Counting Guru";
            departmentList[0][2] = "55";
            departmentList[1][0] = "Accounting";
            departmentList[1][1] = "Counting Pro";
            departmentList[1][2] = "45";
            departmentList[2][0] = "Accounting";
            departmentList[2][1] = "Counting Savvy";
            departmentList[2][2] = "40";
            departmentList[3][0] = "Accounting";
            departmentList[3][1] = "Counting Novice";
            departmentList[3][2] = "25";
            departmentList[4][0] = "Marketing";
            departmentList[4][1] = "Sales Guru";
            departmentList[4][2] = "50";
            departmentList[5][0] = "Marketing";
            departmentList[5][1] = "Sales Pro";
            departmentList[5][2] = "48";
            departmentList[6][0] = "Marketing";
            departmentList[6][1] = "Sales Savvy";
            departmentList[6][2] = "38";
            departmentList[7][0] = "Human Resources";
            departmentList[7][1] = "Hiring Guru";
            departmentList[7][2] = "58";
            departmentList[8][0] = "Human Resources";
            departmentList[8][1] = "Hiring Pro";
            departmentList[8][2] = "47";
            departmentList[9][0] = "Information Systems";
            departmentList[9][1] = "Hacking Pro";
            departmentList[9][2] = "46";
            departmentList[10][0] = "Information Systems";
            departmentList[10][1] = "Hacking Guru";
            departmentList[10][2] = "51";
            departmentList[11][0] = "Information Systems";
            departmentList[11][1] = "Hacking Savvy";
            departmentList[11][2] = "38";
            departmentList[12][0] = "Information Systems";
            departmentList[12][1] = "Hacking Novice";
            departmentList[12][2] = "23";

        for(int row = 0; row < departmentList.length; row++)
        {
            System.out.println(departmentList[row][0] + "\t" + departmentList[row][1] + "\t" + departmentList[row][2]);
        }
    }
}

我希望輸出先按部門打印列表,然后再按年齡從小到大打印。 任何幫助表示贊賞。

您可以使用Arrays.sort並提供一個自定義比較器:

Arrays.sort(departmentList, new Comparator<String[]>() {
        @Override
        public int compare(String[] o1, String[] o2) {
           int cmp =  o1[0].compareTo(o2[0]);
           return cmp != 0 ? cmp : o1[2].compareTo(o2[2]);
        }           
    });

實際上,更好的方法是創建自己的Employee類,並使其實現可比較的接口。

輸出:

Accounting  Counting Novice 25
Accounting  Counting Savvy  40
Accounting  Counting Pro    45
Accounting  Counting Guru   55
Human Resources Hiring Pro  47
Human Resources Hiring Guru 58
Information Systems Hacking Novice  23
Information Systems Hacking Savvy   38
Information Systems Hacking Pro 46
Information Systems Hacking Guru    51
Marketing   Sales Savvy 38
Marketing   Sales Pro   48
Marketing   Sales Guru  50

像這樣

您的Comparator

class SimpleComparator implements Comparator<String[]> {
    @Override
    public int compare(String[] o1, String o2[]) {       
        if(!o1[0].equalsIgnoreCase(o2[0])){
            return o1[0].compareToIgnoreCase(o2[0]);
        }
        int value1 = Integer.parseInt(o1[2]);
        int value2 = Integer.parseInt(o2[2]);
        if(value1!=value2){
            return new Integer(value1).compareTo(value2);
        }
        return 0;
    }
}

您的排序

 Arrays.sort(departmentList,new SimpleComparator());
 for(int row = 0; row < departmentList.length; row++)
 {
      System.out.println(departmentList[row][0] + "\t" + departmentList[row][1] + "\t" + departmentList[row][2]);
 }

輸出

Accounting  Counting Novice 25
Accounting  Counting Savvy  40
Accounting  Counting Pro    45
Accounting  Counting Guru   55
Human Resources Hiring Pro  47
Human Resources Hiring Guru 58
Information Systems Hacking Novice  23
Information Systems Hacking Savvy   38
Information Systems Hacking Pro 46
Information Systems Hacking Guru    51
Marketing   Sales Savvy 38
Marketing   Sales Pro   48
Marketing   Sales Guru  50

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM