インタフェースComparator<T>
- 型パラメータ:
T- このコンパレータで比較できるオブジェクトのタイプ
- 既知のすべての実装クラス:
Collator,RuleBasedCollator
- 関数型インタフェース:
- これは関数型インタフェースなので、ラムダ式またはメソッド参照の代入先として使用できます。
Collections.sortやArrays.sortなど)に渡すと、ソート順を正確に制御できます。 また、コンパレータは、特定のデータ構造の(「ソートされたセット」や「ソートされたマップ」など)の順序を制御したり、「自然順序付け」を持たないオブジェクトのコレクションの順序を指定したりすることもできます。
要素セットSに対するコンパレータcによる順序付けは、S内のe1およびe2ごとにc.compare(e1, e2)==0のブール値がe1.equals(e2)と同じ場合のみ、「等しいと一貫性」と記述されます。
ソート・セット(またはソート・マップ)を順序付けするために、equalsと一貫性のない順序付けを行うことができるコンパレータを使う場合には注意が必要です。 明示的な比較子cを持つソート済セット(またはマップのソート)が、セットSから描画された要素(またはキー)とともに使用されているとします。 Sのcによる順序付けが等しいと矛盾する場合、ソートされたセット(またはマップのソート)は"strangely."を動作させます 特に、ソートされたセット(またはマップのソート)は、equalsの観点から定義されたセット(またはマップ)の一般契約に違反します。
たとえば、(a.equals(b)&& c.compare(a, b)!= 0)である2つの要素aおよびbをコンパレータcで空のTreeSetに追加すると仮定します。 aとbはツリー・セットの点から見て等価ではないため、2番目のaddオペレーションは、Set.addメソッドの仕様とは異なる場合でも、trueを返し、ツリー・セットのサイズは大きくなります。
ノート: コンパレータは、通常、java.io.Serializableも実装することをお薦めします。これは、直列化可能なデータ構造(TreeSet、TreeMapなど)で順序付けメソッドとして使用できるためです。 データ構造が正常に直列化されるようにするには、コンパレータ(提供されている場合)に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順序付けのために2つの引数を比較します。static <T, U extends Comparable<? super U>>
Comparator<T> 型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> reversed()このコンパレータの逆順を義務付けるコンパレータを返します。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
順序付けのために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)の一般規約に従う必要があります。 また、このメソッドは、指定されたオブジェクトがコンパレータでもある場合にtrueonlyを返し、このコンパレータと同じ順序になります。 したがって、comp1.equals(comp2)は、すべてのオブジェクト参照o1およびo2に対するsignum(comp1.compare(o1, o2))==signum(comp2.compare(o1, o2))を意味します。Object.equals(Object)をオーバーライドしないことは、alwaysでも安全です。 ただし、このメソッドを変更し、2つの個別のコンパレータが同じ順序付けを行うことをプログラムが判断できるようにすることで、パフォーマンスが向上する場合があります。 -
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
- 関連項目:
-