ホームページ >Java >&#&チュートリアル >コンパレータとラムダ式を使用して複数のプロパティで Java オブジェクトを並べ替えるにはどうすればよいですか?
プロパティによる Java オブジェクトの並べ替え
特定のプロパティによるオブジェクトの並べ替えは、Java プログラミングの一般的なタスクです。 ActiveAlarm オブジェクトのリストがあるシナリオを考えてみましょう。これらのオブジェクトには、timeStarted や timeEnded などのさまざまなプロパティがあります。
timeStarted と timeEnded に基づいてこのリストを昇順に並べ替えるには、Java の並べ替えアルゴリズムを利用できます。
コンパレータ インターフェイスの使用
1 つのアプローチは、Comparator インターフェイスを実装することです。コンパレータは 2 つのオブジェクトを比較する方法を提供し、比較結果に基づいて昇順または降順を提供します。その方法は次のとおりです:
public class ActiveAlarmComparator implements Comparator<ActiveAlarm> { @Override public int compare(ActiveAlarm o1, ActiveAlarm o2) { // Compare timeStarted first int timeStartedComparison = Long.compare(o1.getTimeStarted(), o2.getTimeStarted()); // If timeStarted is equal, compare timeEnded if (timeStartedComparison == 0) { return Long.compare(o1.getTimeEnded(), o2.getTimeEnded()); } // Return the comparison result for timeStarted return timeStartedComparison; } }
次に、コンパレータを使用してリストを並べ替えます:
List<ActiveAlarm> alarms = new ArrayList<>(); // ... populate the alarms list Collections.sort(alarms, new ActiveAlarmComparator());
Java 8 ラムダ式の使用
Java バージョン 8 以降では、ラムダ式を使用してコンパレータを簡素化できます。実装:
Collections.sort(alarms, Comparator.comparingLong(ActiveAlarm::getTimeStarted) .thenComparingLong(ActiveAlarm::getTimeEnded));
このラムダ式は、timeStarted と timeEnded の両方の比較ロジックを定義する関数インターフェイスを表します。 Comparator.comparingLong() メソッドは、指定された関数に基づいてコンパレータを作成し、プロパティ値を長整数として比較します。
コンパレータまたはラムダ式を使用すると、特定の基準に基づいて Java オブジェクトを並べ替える多用途かつ効果的な方法が提供されます。プロパティを使用して、データの操作と分析を容易にします。
以上がコンパレータとラムダ式を使用して複数のプロパティで Java オブジェクトを並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。