2017-10-10 139 views
0

我想按字母順序排序我的ArrayList。所以我寫了一個的方法。 如果我的員工有相同的姓名,我想根據他們的薪水對他們進行分類,這意味着應該先打印出薪水較高的員工。Java:使用條件對ArrayList中的對象進行排序

那麼,我成功地設法按字母順序排序,但我不知道如何比較,如果員工有相同的名稱,如果是這樣的話,應該打印薪水較高的員工。謝謝。

ArrayList<Employee> employees = new ArrayList<Employee>(); 

public void sortEmployees(){ 
    Collections.sort(employees, (p1, p2) -> p1.name.compareTo(p2.name)); 
    for(Employee employee: employees){ 
     System.out.println("ID: " + employee.ID + END_OF_LINE + "Name: "+employee.name + END_OF_LINE + "Salary: " + employee.grossSalary); 
     System.out.println(""); // just an empty line 
    } 
} 
+0

你快到了。修改你的比較器,如果'compareTo()'不爲零,則使用此值,否則比較薪水並使用該值。 – dave

+0

對不起,我沒有完全明白。你介意在代碼中顯示我嗎? – JavaTeachMe2018

+0

'Comparator.comparing(e - > e.name).thenComparingInt(e - > suchrossSalary)' – shmosel

回答

2

創建一個適當的Comparator將根據您的所需條件比較兩個項目。然後在您的ArrayList上使用Collections.sort()

如果稍後您想按不同標準排序,請使用不同的Comparator再次撥打Collections.sort()

參考:How to sort an ArrayList using multiple sorting criteria?

只是一個爲未來的問題諮詢,請妥善Google或提出新的問題之前,計算器您的問題進行搜索。大多數時候,這些微不足道的問題已經被提出並得到解答。

+0

謝謝你的回覆。我查看了另一篇文章的答案,但我仍然不確定比較器應該是什麼樣子,因爲這是我第一次與他們合作。你介意提高你的答案並展示代碼的外觀? – JavaTeachMe2018

+0

@ JavaTeachMe2018你弄明白了嗎?還是你想讓我編輯我的答案? – unrealsoul007

+0

我還沒有弄清楚,謝謝你的考慮:=) – JavaTeachMe2018

1

我假設你有方法等於返回兩個名字是否相等。您可以按如下方式定義您的比較器:

ArrayList<Employee> employees = new ArrayList<Employee>(); 

public void sortEmployees(){ 
    Collections.sort(employees, new Comparator<Employee>() { 
    @Override 
    public int compare(Employee a, Employee b) { 
     if (a.name.equals(b.name)) { 
     return b.salary - a.salary; 
     } else { 
     return p1.name.compareTo(p2.name); 
     } 
    } 
    }); 
    for(Employee employee: employees){ 
    System.out.println("ID: " + employee.ID + END_OF_LINE + "Name: "+employee.name + END_OF_LINE + "Salary: " + employee.grossSalary); 
    System.out.println(""); // just an empty line 
    } 
} 
+0

雖然這看起來正確,但我認爲使用_lambda_會更好,而不是創建一個「比較器」。它的代碼更少,符合OP當前的實現。 – dave

相關問題