モジュール java.base
パッケージ java.util

インタフェースComparator<T>

型パラメータ:
T - このコンパレータにより比較されるオブジェクトの型
既知のすべての実装クラス:
Collator, RuleBasedCollator
関数型インタフェース:
これは関数型インタフェースなので、ラムダ式またはメソッド参照の代入先として使用できます。

@FunctionalInterface public interface Comparator<T>
オブジェクトのコレクションで全体順序付けを行う比較関数です。 コンパレータ(Comparator)をソート・メソッド(Collections.sortArrays.sortなど)に渡すと、ソート順を正確に制御できます。 また、コンパレータは、特定のデータ構造の(「ソートされたセット」「ソートされたマップ」など)の順序を制御したり、「自然順序付け」を持たないオブジェクトのコレクションの順序を指定したりすることもできます。

要素セットSに対するコンパレータcによる順序付けは、S内のe1およびe2ごとにc.compare(e1, e2)==0のブール値がe1.equals(e2)と同じ場合のみ、「等しいと一貫性」と記述されます。

ソート・セット(またはソート・マップ)を順序付けするために、equalsと一貫性のない順序付けを行うことができるコンパレータを使う場合には注意が必要です。 明示的な比較子cを持つソート済セット(またはマップのソート)が、セットSから描画された要素(またはキー)とともに使用されているとします。 Scによる順序付けが等しいと矛盾する場合、ソートされたセット(またはマップのソート)は"strangely."を動作させます 特に、ソートされたセット(またはマップのソート)は、equalsの観点から定義されたセット(またはマップ)の一般契約に違反します。

たとえば、(a.equals(b)&& c.compare(a, b)!= 0)である2つの要素aおよびbをコンパレータcで空のTreeSetに追加すると仮定します。 abはツリー・セットの点から見て等価ではないため、2番目のaddオペレーションは、Set.addメソッドの仕様とは異なる場合でも、trueを返し、ツリー・セットのサイズは大きくなります。

ノート: コンパレータは、通常、java.io.Serializableも実装することをお薦めします。これは、直列化可能なデータ構造(TreeSetTreeMapなど)で順序付けメソッドとして使用できるためです。 データ構造が正常に直列化されるようにするには、コンパレータ(提供されている場合)にSerializableを実装する必要があります。

数学的傾斜の場合、特定のコンパレータcが特定のオブジェクトSのセットに課す「課せられたオーダー」を定義する「関係」は、次のとおりです:

       {(x, y) such that c.compare(x, y) <= 0}.
 
この全体順序のは次のとおりです。
       {(x, y) such that c.compare(x, y) == 0}.
 
compareの契約からすぐに、商号がS「等価関係」であり、指定されている順序はS「オーダー合計」であることがわかります。 cによってSに課される順序が「等しいと一貫性」であるといった場合、順序付けの引用符は、オブジェクトのequals(Object) method(s)で定義された等価関係であることを意味します:
     {(x, y) such that x.equals(y)}. 
つまり、強制的な順序が等号と一致する場合、equalsメソッドの等価関係によって定義される同等のクラスと、compareメソッドのquotientによって定義される同等のクラスは同じです。

Comparableとは異なり、コンパレータは等価関係の要件を保ちつつ、null引数の比較をオプションで許可できます。

このインタフェースは、Java Collections Frameworkのメンバーです。

導入されたバージョン:
1.2
関連項目:
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    int
    compare(T o1, T o2)
    順序付けのために2つの引数を比較します。
    static <T, U extends Comparable<? super U>>
    Comparator<T>
    comparing(Function<? super T,? extends U> keyExtractor)
    TからComparableソート・キーを抽出する関数を受け取り、そのソート・キーで比較する Comparator<T>を返します。
    static <T, U> Comparator<T>
    comparing(Function<? super T,? extends U> keyExtractor, Comparator<? super U> keyComparator)
    Tからソート・キーを抽出する関数を受け取り、指定されたComparatorを使ってそのソート・キーで比較するComparator<T>を返します。
    static <T> Comparator<T>
    comparingDouble(ToDoubleFunction<? super T> keyExtractor)
    Tからdoubleソート・キーを抽出する関数を受け取り、そのソート・キーで比較するComparator<T>を返します。
    static <T> Comparator<T>
    comparingInt(ToIntFunction<? super T> keyExtractor)
    Tからintソート・キーを抽出する関数を受け取り、そのソート・キーで比較するComparator<T>を返します。
    static <T> Comparator<T>
    comparingLong(ToLongFunction<? super T> keyExtractor)
    Tからlongソート・キーを抽出する関数を受け取り、そのソート・キーで比較するComparator<T>を返します。
    boolean
    ほかのオブジェクトがこのコンパレータと「等しい」かどうかを示します。
    static <T extends Comparable<? super T>>
    Comparator<T>
    Comparableオブジェクトを自然順序で比較するコンパレータを返します。
    static <T> Comparator<T>
    nullsFirst(Comparator<? super T> comparator)
    nullをnull以外より小さいとみなす、nullフレンドリのコンパレータを返します。
    static <T> Comparator<T>
    nullsLast(Comparator<? super T> comparator)
    nullをnull以外より大きいとみなす、nullフレンドリのコンパレータを返します。
    default Comparator<T>
    このコンパレータの逆順を義務付けるコンパレータを返します。
    static <T extends Comparable<? super T>>
    Comparator<T>
    自然順序付けの逆を義務付けるコンパレータを返します。
    default Comparator<T>
    thenComparing(Comparator<? super T> other)
    辞書式順序コンパレータをもう一方のコンパレータとともに返します。
    default <U extends Comparable<? super U>>
    Comparator<T>
    thenComparing(Function<? super T,? extends U> keyExtractor)
    Comparableソート・キーを抽出する関数を含む辞書式順序コンパレータを返します。
    default <U> Comparator<T>
    thenComparing(Function<? super T,? extends U> keyExtractor, Comparator<? super U> keyComparator)
    指定されたComparatorで比較されるキーを抽出する関数を含む辞書式順序コンパレータを返します。
    default Comparator<T>
    thenComparingDouble(ToDoubleFunction<? super T> keyExtractor)
    doubleソート・キーを抽出する関数を含む辞書式順序コンパレータを返します。
    default Comparator<T>
    thenComparingInt(ToIntFunction<? super T> keyExtractor)
    intソート・キーを抽出する関数を使用して、辞書順コンパレータを返します。
    default Comparator<T>
    thenComparingLong(ToLongFunction<? super T> keyExtractor)
    longソート・キーを抽出する関数を含む辞書式順序コンパレータを返します。
  • メソッドの詳細

    • compare

      int compare(T o1, T o2)
      順序付けのために2つの引数を比較します。 最初の引数が2番目の引数より小さい場合は負の整数、両方が等しい場合は0、最初の引数が2番目の引数より大きい場合は正の整数を返します。

      実装者は、すべてのxおよびyに対してsignum(compare(x, y)) == -signum(compare(y, x))を確認する必要があります。 (これは、 compare(y, x)が例外をスローした場合のみ、 compare(x, y)が例外をスローする必要があることを意味します。)

      実装者は、関係が推移的であることも保証しなければならない: ((compare(x, y)>0) && (compare(y, z)>0))compare(x, z)>0を意味します。

      最後に、実装者は、compare(x, y)==0はすべてのzに対してsignum(compare(x, z))==signum(compare(y, z))を意味します。

      APIのノート:
      通常はそうですが、(compare(x, y)==0) == (x.equals(y))は厳密には必要ありません。 通常は、この条件に違反するコンパレータではこの事実が明確に示される必要があります。 お勧めする文言は「ノート:このコンパレータはequalsと一貫性のない順序付けを課します。」です。
      パラメータ:
      o1 - 比較対象の最初のオブジェクト。
      o2 - 比較対象の2番目のオブジェクト。
      戻り値:
      最初の引数が2番目の引数より小さい場合は負の整数、両方が等しい場合は0、最初の引数が2番目の引数より大きい場合は正の整数。
      例外:
      NullPointerException - 引数がnullで、このコンパレータがnull引数を許可しない場合
      ClassCastException - 引数の型がこのコンパレータによる比較を妨げる場合。
    • equals

      boolean equals(Object obj)
      ほかのオブジェクトがこのコンパレータと「等しい」かどうかを示します。 このメソッドはObject.equals(Object)の一般規約に従う必要があります。 また、このメソッドは、指定されたオブジェクトがコンパレータでもある場合にtrue onlyを返し、このコンパレータと同じ順序になります。 したがって、comp1.equals(comp2)は、すべてのオブジェクト参照o1およびo2に対するsignum(comp1.compare(o1, o2))==signum(comp2.compare(o1, o2))を意味します。

      Object.equals(Object)をオーバーライドしないことは、alwaysでも安全です。 ただし、このメソッドを変更し、2つの個別のコンパレータが同じ順序付けを行うことをプログラムが判断できるようにすることで、パフォーマンスが向上する場合があります。

      オーバーライド:
      equals、クラスObject
      パラメータ:
      obj - 比較対象の参照オブジェクト。
      戻り値:
      指定されたオブジェクトもコンパレータであり、それがこのコンパレータと同じ順序付けを行う場合にだけtrue
      関連項目:
    • reversed

      default Comparator<T> reversed()
      このコンパレータの逆順を義務付けるコンパレータを返します。
      戻り値:
      このコンパレータの逆順を義務付けるコンパレータ。
      導入されたバージョン:
      1.8
    • thenComparing

      default Comparator<T> thenComparing(Comparator<? super T> other)
      辞書式順序コンパレータをもう一方のコンパレータとともに返します。 このComparatorで2つの要素が等しい(つまり、compare(a, b) == 0)と見なされる場合は、otherを使ってその順序が決められます。

      指定されたコンパレータが直列化可能の場合、返されるコンパレータも直列化可能になります。

      APIのノート:
      たとえば、Stringのコレクションをまず長さに基づいてソートし、次に大文字と小文字を区別しない自然順序付けに基づいてソートするには、次のコードを使用してコンパレータを構成できます。
      
           Comparator<String> cmp = Comparator.comparingInt(String::length)
                   .thenComparing(String.CASE_INSENSITIVE_ORDER);
       
      パラメータ:
      other - このコンパレータが等しい2つのオブジェクトを比較するときに使用されるもう一方のコンパレータ。
      戻り値:
      このコンパレータと、その後のもう一方のコンパレータで構成される辞書式順序コンパレータ
      例外:
      NullPointerException - 引数がnullである場合。
      導入されたバージョン:
      1.8
    • thenComparing

      default <U> Comparator<T> thenComparing(Function<? super T,? extends U> keyExtractor, Comparator<? super U> keyComparator)
      指定されたComparatorで比較されるキーを抽出する関数を含む辞書式順序コンパレータを返します。
      実装要件:
      このデフォルトの実装は、 thenComparing(comparing(keyExtractor, cmp))であるかのように動作します。
      型パラメータ:
      U - ソート・キーの型
      パラメータ:
      keyExtractor - ソート・キーの抽出に使用される関数
      keyComparator - ソート・キーの比較に使用されるComparator
      戻り値:
      このコンパレータと、その後のkeyExtractor関数で抽出されたキーでの比較で構成される辞書式順序コンパレータ
      例外:
      NullPointerException - どちらかの引数がnullである場合。
      導入されたバージョン:
      1.8
      関連項目:
    • thenComparing

      default <U extends Comparable<? super U>> Comparator<T> thenComparing(Function<? super T,? extends U> keyExtractor)
      Comparableソート・キーを抽出する関数を含む辞書式順序コンパレータを返します。
      実装要件:
      このデフォルトの実装は、 thenComparing(comparing(keyExtractor))であるかのように動作します。
      型パラメータ:
      U - Comparableソート・キーの型
      パラメータ:
      keyExtractor - Comparableソート・キーの抽出に使用される関数
      戻り値:
      このコンパレータと、その後のComparableソート・キーで構成される辞書式順序コンパレータ。
      例外:
      NullPointerException - 引数がnullである場合。
      導入されたバージョン:
      1.8
      関連項目:
    • thenComparingInt

      default Comparator<T> thenComparingInt(ToIntFunction<? super T> keyExtractor)
      intソート・キーを抽出する関数を使用して、辞書順コンパレータを返します。
      実装要件:
      このデフォルトの実装は、 thenComparing(comparingInt(keyExtractor))であるかのように動作します。
      パラメータ:
      keyExtractor - 整数のソート・キーの抽出に使用される関数
      戻り値:
      このコンパレータと、その後のintソート・キーで構成される辞書式順序コンパレータ
      例外:
      NullPointerException - 引数がnullである場合。
      導入されたバージョン:
      1.8
      関連項目:
    • thenComparingLong

      default Comparator<T> thenComparingLong(ToLongFunction<? super T> keyExtractor)
      longソート・キーを抽出する関数を含む辞書式順序コンパレータを返します。
      実装要件:
      このデフォルトの実装は、 thenComparing(comparingLong(keyExtractor))であるかのように動作します。
      パラメータ:
      keyExtractor - longのソート・キーの抽出に使用される関数
      戻り値:
      このコンパレータと、その後のlongソート・キーで構成される辞書式順序コンパレータ
      例外:
      NullPointerException - 引数がnullである場合。
      導入されたバージョン:
      1.8
      関連項目:
    • thenComparingDouble

      default Comparator<T> thenComparingDouble(ToDoubleFunction<? super T> keyExtractor)
      doubleソート・キーを抽出する関数を含む辞書式順序コンパレータを返します。
      実装要件:
      このデフォルトの実装は、 thenComparing(comparingDouble(keyExtractor))であるかのように動作します。
      パラメータ:
      keyExtractor - doubleのソート・キーの抽出に使用される関数
      戻り値:
      このコンパレータと、その後のdoubleソート・キーで構成される辞書式順序コンパレータ
      例外:
      NullPointerException - 引数がnullである場合。
      導入されたバージョン:
      1.8
      関連項目:
    • reverseOrder

      static <T extends Comparable<? super T>> Comparator<T> reverseOrder()
      自然順序付けの逆を義務付けるコンパレータを返します。

      返されるコンパレータは直列化可能であり、nullを比較した場合にNullPointerExceptionをスローします。

      型パラメータ:
      T - 比較対象の要素のComparable
      戻り値:
      Comparableオブジェクトに自然順序付けの逆を義務付けるコンパレータ。
      導入されたバージョン:
      1.8
      関連項目:
    • naturalOrder

      static <T extends Comparable<? super T>> Comparator<T> naturalOrder()
      Comparableオブジェクトを自然順序で比較するコンパレータを返します。

      返されるコンパレータは直列化可能であり、nullを比較した場合にNullPointerExceptionをスローします。

      型パラメータ:
      T - 比較対象の要素のComparable
      戻り値:
      Comparableオブジェクトに自然順序付けを義務付けるコンパレータ。
      導入されたバージョン:
      1.8
      関連項目:
    • nullsFirst

      static <T> Comparator<T> nullsFirst(Comparator<? super T> comparator)
      nullをnull以外より小さいとみなす、nullフレンドリのコンパレータを返します。 両方ともnullである場合、それらは等しいと見なされます。 両方ともnull以外である場合、指定されたComparatorを使ってその順序が決められます。 指定されたコンパレータがnullである場合、返されるコンパレータはnull以外のすべての値が等しいと見なします。

      指定されたコンパレータが直列化可能の場合、返されるコンパレータも直列化可能になります。

      型パラメータ:
      T - 比較対象の要素の型
      パラメータ:
      comparator - null以外の値を比較するためのComparator
      戻り値:
      nullをnull以外よりも小さいと見なし、指定されたComparatorを使ってnull以外のオブジェクトを比較します。
      導入されたバージョン:
      1.8
    • nullsLast

      static <T> Comparator<T> nullsLast(Comparator<? super T> comparator)
      nullをnull以外より大きいとみなす、nullフレンドリのコンパレータを返します。 両方ともnullである場合、それらは等しいと見なされます。 両方ともnull以外である場合、指定されたComparatorを使ってその順序が決められます。 指定されたコンパレータがnullである場合、返されるコンパレータはnull以外のすべての値が等しいと見なします。

      指定されたコンパレータが直列化可能の場合、返されるコンパレータも直列化可能になります。

      型パラメータ:
      T - 比較対象の要素の型
      パラメータ:
      comparator - null以外の値を比較するためのComparator
      戻り値:
      nullをnull以外よりも大きいと見なし、指定されたComparatorを使ってnull以外のオブジェクトを比較します。
      導入されたバージョン:
      1.8
    • comparing

      static <T, U> Comparator<T> comparing(Function<? super T,? extends U> keyExtractor, Comparator<? super U> keyComparator)
      Tからソート・キーを抽出する関数を受け取り、指定されたComparatorを使ってそのソート・キーで比較するComparator<T>を返します。

      指定された関数とコンパレータの両方が直列化可能の場合、返されるコンパレータも直列化可能になります。

      APIのノート:
      たとえば、 Personオブジェクトをその姓(大文字小文字の区別を無視して)で比較するComparatorを取得するには、
      
           Comparator<Person> cmp = Comparator.comparing(
                   Person::getLastName,
                   String.CASE_INSENSITIVE_ORDER);
       
      型パラメータ:
      T - 比較対象の要素の型
      U - ソート・キーの型
      パラメータ:
      keyExtractor - ソート・キーの抽出に使用される関数
      keyComparator - ソート・キーの比較に使用されるComparator
      戻り値:
      指定されたComparatorを使用して、抽出されたキーで比較を行うコンパレータ
      例外:
      NullPointerException - どちらかの引数がnullの場合
      導入されたバージョン:
      1.8
    • comparing

      static <T, U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T,? extends U> keyExtractor)
      TからComparableソート・キーを抽出する関数を受け取り、そのソート・キーで比較する Comparator<T>を返します。

      指定された関数が直列化可能の場合、返されるコンパレータも直列化可能になります。

      APIのノート:
      たとえば、 Personオブジェクトをその姓で比較するComparatorを取得するには、
      
           Comparator<Person> byLastName = Comparator.comparing(Person::getLastName);
       
      型パラメータ:
      T - 比較対象の要素の型
      U - Comparableソート・キーの型
      パラメータ:
      keyExtractor - Comparableソート・キーの抽出に使用される関数
      戻り値:
      抽出されたキーで比較を行うコンパレータ
      例外:
      NullPointerException - 引数がnullの場合
      導入されたバージョン:
      1.8
    • comparingInt

      static <T> Comparator<T> comparingInt(ToIntFunction<? super T> keyExtractor)
      Tからintソート・キーを抽出する関数を受け取り、そのソート・キーで比較するComparator<T>を返します。

      指定された関数が直列化可能の場合、返されるコンパレータも直列化可能になります。

      型パラメータ:
      T - 比較対象の要素の型
      パラメータ:
      keyExtractor - 整数のソート・キーの抽出に使用される関数
      戻り値:
      抽出されたキーで比較を行うコンパレータ
      例外:
      NullPointerException - 引数がnullの場合
      導入されたバージョン:
      1.8
      関連項目:
    • comparingLong

      static <T> Comparator<T> comparingLong(ToLongFunction<? super T> keyExtractor)
      Tからlongソート・キーを抽出する関数を受け取り、そのソート・キーで比較するComparator<T>を返します。

      指定された関数が直列化可能の場合、返されるコンパレータも直列化可能になります。

      型パラメータ:
      T - 比較対象の要素の型
      パラメータ:
      keyExtractor - longのソート・キーの抽出に使用される関数
      戻り値:
      抽出されたキーで比較を行うコンパレータ
      例外:
      NullPointerException - 引数がnullの場合
      導入されたバージョン:
      1.8
      関連項目:
    • comparingDouble

      static <T> Comparator<T> comparingDouble(ToDoubleFunction<? super T> keyExtractor)
      Tからdoubleソート・キーを抽出する関数を受け取り、そのソート・キーで比較するComparator<T>を返します。

      指定された関数が直列化可能の場合、返されるコンパレータも直列化可能になります。

      型パラメータ:
      T - 比較対象の要素の型
      パラメータ:
      keyExtractor - doubleのソート・キーの抽出に使用される関数
      戻り値:
      抽出されたキーで比較を行うコンパレータ
      例外:
      NullPointerException - 引数がnullの場合
      導入されたバージョン:
      1.8
      関連項目: