[英]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.