ホームページ  >  記事  >  Java  >  コンパレータを使用して Java オブジェクトのリストを複数のタイムスタンプで並べ替えるにはどうすればよいですか?

コンパレータを使用して Java オブジェクトのリストを複数のタイムスタンプで並べ替えるにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-20 14:40:12251ブラウズ

How can I sort a list of Java objects by multiple timestamps using Comparators?

コンパレータを使用したタイムスタンプによるリスト内のオブジェクトの並べ替え

Java では、複数のプロパティに基づいてオブジェクトのリストを並べ替えるには、コンパレータを使用する必要があります。 ActiveAlarm などの時間関連の属性を持つクラスがある場合、コンパレータを使用してそれらを特定の順序で並べ替えることができます。

リストを並べ替えるには timeStarted の昇順、次に timeEnded の順に、Comparator インターフェイスを実装するカスタム コンパレータを作成できます。以下に例を示します。

List<ActiveAlarm> alarms = new ArrayList<>();

// Custom comparator to compare ActiveAlarm instances based on timeStarted and timeEnded
Comparator<ActiveAlarm> comparator = new Comparator<ActiveAlarm>() {
    @Override
    public int compare(ActiveAlarm o1, ActiveAlarm o2) {
        // First compare timeStarted
        int comparisonResult = Long.compare(o1.timeStarted, o2.timeStarted);
        // If timeStarted is equal, compare timeEnded
        if (comparisonResult == 0) {
            comparisonResult = Long.compare(o1.timeEnded, o2.timeEnded);
        }
        return comparisonResult;
    }
};

// Sort the list of alarms using the comparator
Collections.sort(alarms, comparator);

このコンパレータでは、compare メソッドは最初に timeStarted 値を比較し、o1 が o2 より早い (0) かを示す整数を返します。 timeStarted 値が等しい場合は、timeEnded 値を比較します。

Java 8 以降では、ラムダ式を使用してコンパレータを簡素化できます。

Comparator<ActiveAlarm> comparator = (o1, o2) -> {
    int comparisonResult = Long.compare(o1.timeStarted, o2.timeStarted);
    if (comparisonResult == 0) {
        comparisonResult = Long.compare(o1.timeEnded, o2.timeEnded);
    }
    return comparisonResult;
};

コンパレータを利用することで、特定のプロパティに基づいてオブジェクトのリストを効率的に並べ替えることができ、Java でデータを整理および操作するための柔軟なアプローチを提供します。

以上がコンパレータを使用して Java オブジェクトのリストを複数のタイムスタンプで並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。