Interfejs komparatora Java służy do porządkowania obiektów klasy zdefiniowanej przez użytkownika.
Interfejs ten znajduje się w pakiecie java.util i zawiera 2 metody Compare(Object obj1,Object obj2) i Equals(Element obiektu).
Zapewnia wiele sekwencji sortowania, tzn. możesz sortować elementy na podstawie dowolnego elementu danych, na przykład rollno, imienia, wieku lub czegokolwiek innego.
Metody interfejsu komparatora Java
metoda | Opis |
---|---|
public int Compare(Obiekt obj1, Obiekt obj2) | Porównuje pierwszy obiekt z drugim obiektem. |
publiczna wartość logiczna równa się (obiekt obiektu) | Służy do porównania bieżącego obiektu z określonym obiektem. |
publiczna wartość logiczna równa się (obiekt obiektu) | Służy do porównania bieżącego obiektu z określonym obiektem. |
metoda | Opis |
---|---|
int porównaj(T o1, To o2) | Porównuje pierwszy obiekt z drugim obiektem. |
statyczny | Akceptuje funkcję, która wyodrębnia klucz sortowania Comparable z typu T i zwraca komparator, który porównuje według tego klucza sortowania. |
statyczne porównywanie komparatorów (ekstraktor klawiszy funkcyjnych, komparator kluczy komparatorów) | Akceptuje funkcję, która wyodrębnia klucz sortowania z typu T i zwraca komparator, który porównuje według tego klucza sortowania przy użyciu określonego komparatora. |
statyczny komparator porównującyDouble(ToDoubleFunction keyExtractor) | Akceptuje funkcję, która wyodrębnia klucz podwójnego sortowania z typu T i zwraca komparator, który porównuje według tego klucza sortowania. |
statyczny komparator porównującyInt(ToIntFunction keyExtractor) | Akceptuje funkcję, która wyodrębnia klucz sortowania typu int z typu T i zwraca komparator, który porównuje według tego klucza sortowania. |
statyczny komparator porównującyLong(ToLongFunction keyExtractor) | Akceptuje funkcję, która wyodrębnia długi klucz sortowania z typu T i zwraca komparator, który porównuje według tego klucza sortowania. |
wartość logiczna równa się (obiekt obiektu) | Służy do porównania bieżącego obiektu z określonym obiektem. |
statyczny | Zwraca komparator, który porównuje obiekty Comparable w naturalnej kolejności. |
static Comparator nullsFirst(Komparator komparatora) | Zwraca komparator, który traktuje wartość null jako mniejszą niż elementy inne niż null. |
statyczny Komparator nullsLast(Komparator komparatora) | Zwraca komparator, który traktuje wartość null jako większą niż elementy inne niż null. |
domyślny komparator odwrócony() | Zwraca komparator, który zawiera odwrotną kolejność dostarczonego komparatora. |
statyczny | Zwraca komparator zawierający odwrotność kolejności naturalnej. |
domyślny komparator następniePorównanie (inny komparator) | Zwraca komparator porządku leksykograficznego z innym komparatorem. |
domyślnyKomparator następniePorównanie (Ekstraktor klawiszy funkcyjnych) | Zwraca komparator porządku leksykograficznego z funkcją wyodrębniającą klucz sortowania Comparable. |
domyślny komparator thenComparing(Ekstraktor klawiszy funkcyjnych, Komparator kluczy komparatorów) | Zwraca komparator porządku leksykograficznego z funkcją wyodrębniającą klucz do porównania z danym komparatorem. |
domyślny komparator thenComparingDouble(ToDoubleFunction keyExtractor) | Zwraca komparator porządku leksykograficznego z funkcją wyodrębniającą klucz podwójnego sortowania. |
domyślny komparator thenComparingInt(ToIntFunction keyExtractor) | Zwraca komparator porządku leksykograficznego z funkcją wyodrębniającą klucz sortowania typu int. |
domyślny komparator thenComparingLong(ToLongFunction keyExtractor) | Zwraca komparator porządku leksykograficznego z funkcją wyodrębniającą długi klucz sortowania. |
Przykład porównawczy Java 8
Zobaczmy przykład sortowania elementów Listy na podstawie wieku i imienia.
Plik: 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; } }
Plik: 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
Przykład komparatora Java 8: metody nullsFirst() i nullsLast().
Tutaj sortujemy listę elementów, która również zawiera wartość null.
Plik: 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; } }
Plik: 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