Java コンパレータ インターフェイス ユーザー定義クラスのオブジェクトを順序付けるために使用されます。
このインターフェイスは java.util パッケージ内にあり、compare(Object obj1,Object obj2) およびquals(Object element) の 2 つのメソッドが含まれています。
複数の並べ替えシーケンスが提供されます。つまり、ロール番号、名前、年齢など、任意のデータ メンバーに基づいて要素を並べ替えることができます。
Java コンパレータ インターフェイスのメソッド
方法 | 説明 |
---|---|
public int Compare(オブジェクト obj1, オブジェクト obj2) | 最初のオブジェクトと 2 番目のオブジェクトを比較します。 |
public booleanquals(Object obj) | 現在のオブジェクトと指定されたオブジェクトを比較するために使用されます。 |
public booleanquals(Object obj) | 現在のオブジェクトと指定されたオブジェクトを比較するために使用されます。 |
方法 | 説明 |
---|---|
int 比較(T o1, To2) | 最初のオブジェクトと 2 番目のオブジェクトを比較します。 |
静的 | これは、型 T から Comparable ソート キーを抽出する関数を受け取り、そのソート キーによって比較する Comparator を返します。 |
静的コンパレータ比較(Function keyExtractor, Comparator keyComparator) | これは、型 T からソート キーを抽出する関数を受け入れ、指定された Comparator を使用してそのソート キーによって比較する Comparator を返します。 |
静的コンパレータcomparatorDouble(ToDoubleFunction keyExtractor) | これは、型 T から二重ソート キーを抽出する関数を受け入れ、そのソート キーによって比較する Comparator を返します。 |
静的コンパレータ CompareInt(ToIntFunction keyExtractor) | これは、型 T から int ソート キーを抽出する関数を受け取り、そのソート キーで比較する Comparator を返します。 |
静的コンパレータcomparingLong(ToLongFunction keyExtractor) | これは、型 T から長いソート キーを抽出する関数を受け入れ、そのソート キーによって比較する Comparator を返します。 |
ブール値等しい(オブジェクトobj) | 現在のオブジェクトと指定されたオブジェクトを比較するために使用されます。 |
静的 | Comparable オブジェクトを自然な順序で比較するコンパレータを返します。 |
静的コンパレータ nullsFirst(コンパレータ コンパレータ) | null を非 null 要素より小さいものとして扱うコンパレータを返します。 |
静的コンパレータ nullsLast(コンパレータ コンパレータ) | null を null 以外の要素よりも大きいものとして扱うコンパレータを返します。 |
デフォルトのコンパレータ reversed() | 指定されたコンパレータの逆の順序を含むコンパレータを返します。 |
静的 | 自然な順序の逆を含むコンパレータを返します。 |
デフォルトのコンパレータ thenComparing(コンパレータ other) | 辞書順のコンパレータと別のコンパレータを返します。 |
デフォルトコンパレータ thenComparing(ファンクションキー抽出) | Comparable ソート キーを抽出する関数を備えた辞書順コンパレータを返します。 |
デフォルトのコンパレータ thenComparing(ファンクション keyExtractor, コンパレータ keyComparator) | 指定された Comparator と比較するキーを抽出する関数を備えた辞書編集順のコンパレータを返します。 |
デフォルトのコンパレータ thenComparingDouble(ToDoubleFunction keyExtractor) | 二重ソートキーを抽出する関数を備えた辞書順コンパレータを返します。 |
デフォルトのコンパレータ thenComparingInt(ToIntFunction keyExtractor) | int ソート キーを抽出する関数を含む辞書順コンパレーターを返します。 |
デフォルトのコンパレータ thenComparingLong(ToLongFunction keyExtractor) | 長いソートキーを抽出する関数を備えた辞書順コンパレータを返します。 |
Java 8 コンパレータの例
List の要素を年齢と名前に基づいて並べ替える例を見てみましょう。
ファイル: Student.java
class Student { int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } public int getRollno() { return rollno; } public void setRollno(int rollno) { this.rollno = rollno; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
ファイル: TestSort1.java
import java.util.*; public class TestSort1{ public static void main(String args[]){ ArrayList al=new ArrayList(); al.add(new Student(101,'Vijay',23)); al.add(new Student(106,'Ajay',27)); al.add(new Student(105,'Jai',21)); //Sorting elements on the basis of name Comparator cm1=Comparator.comparing(Student::getName); Collections.sort(al,cm1); System.out.println('Sorting by Name'); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } //Sorting elements on the basis of age Comparator cm2=Comparator.comparing(Student::getAge); Collections.sort(al,cm2); System.out.println('Sorting by Age'); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } }
Sorting by Name 106 Ajay 27 105 Jai 21 101 Vijay 23 Sorting by Age 105 Jai 21 101 Vijay 23 106 Ajay 27
Java 8 コンパレータの例: nullsFirst() メソッドと nullsLast() メソッド
ここでは、null も含まれる要素のリストを並べ替えます。
ファイル: Student.java
class Student { int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } public int getRollno() { return rollno; } public void setRollno(int rollno) { this.rollno = rollno; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
ファイル: TestSort2.java
import java.util.*; public class TestSort2{ public static void main(String args[]){ ArrayList al=new ArrayList(); al.add(new Student(101,'Vijay',23)); al.add(new Student(106,'Ajay',27)); al.add(new Student(105,null,21)); Comparator cm1=Comparator.comparing(Student::getName,Comparator.nullsFirst(String::compareTo)); Collections.sort(al,cm1); System.out.println('Considers null to be less than non-null'); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } Comparator cm2=Comparator.comparing(Student::getName,Comparator.nullsLast(String::compareTo)); Collections.sort(al,cm2); System.out.println('Considers null to be greater than non-null'); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } }
Considers null to be less than non-null 105 null 21 106 Ajay 27 101 Vijay 23 Considers null to be greater than non-null 106 Ajay 27 101 Vijay 23 105 null 21