2017-10-10 9 views
0

アルファベット順にArrayListをソートしたいと思います。したがって、私はsortEmployeesメソッドを書いた。 従業員が同じ名前の場合、私は給与に基づいてソートしたいと考えています。つまり、給与の高い従業員を最初に印刷する必要があります。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 - > abnrossSalary)' – shmosel

答えて

2

目的の基準に従って2つのアイテムを比較する適切なComparatorを作成します。次にArrayListCollections.sort()を入力してください。

後で別の基準で並べ替える場合は、別のComparatorを使用してCollections.sort()に再度呼び出します。

参考:未来の質問のためのHow to sort an ArrayList using multiple sorting criteria?

ちょうどアドバイス、適切にGoogleや新しい質問をする前に、あなたの問題のためにStackOverflowの上で検索してください。そのような些細な質問のほとんどは、すでに尋ねられ答えられています。

+0

返信いただきありがとうございます。私は他の記事の回答を見ましたが、コンパイラがどのように見えるかはまだわかりません。なぜなら、私が彼らと一緒に作業しているのは初めてだからです。あなたの答えを向上させ、コードがどのように見えるかを見せてもらえますか? – JavaTeachMe2018

+0

@ JavaTeachMe2018あなたはそれを理解しましたか、私の答えを編集したいですか? – unrealsoul007

+0

私はまだ理解していませんでした、あなたの配慮に感謝します:=) – JavaTeachMe2018

1

2つの名前が等しいかどうかを返すメソッドequalsがあるとします。コンパレータを次のように定義することができます。

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

これは正しいようですが、 'Comparator'を作るのではなく、_lambda_を使う方が良いと思います。それはコードが少なく、OPの現在の実装に適合します。 – dave

関連する問題