Інтерфейс Java Comparator використовується для впорядкування об’єктів визначеного користувачем класу.
Цей інтерфейс міститься в пакеті java.util і містить 2 методи compare(Object obj1,Object obj2) і equals(Object element).
Він забезпечує кілька послідовностей сортування, тобто ви можете сортувати елементи на основі будь-якого елемента даних, наприклад, rollno, імені, віку або будь-чого іншого.
Методи інтерфейсу компаратора Java
метод | опис |
---|---|
public int compare(Object obj1, Object obj2) | Він порівнює перший об’єкт з другим об’єктом. |
публічне логічне значення дорівнює (Object obj) | Він використовується для порівняння поточного об'єкта з вказаним об'єктом. |
публічне логічне значення дорівнює (Object obj) | Він використовується для порівняння поточного об'єкта з вказаним об'єктом. |
метод | опис |
---|---|
int compare(T o1, T o2) | Він порівнює перший об'єкт з другим об'єктом. |
статичний | Він приймає функцію, яка витягує порівняльний ключ сортування з типу T, і повертає компаратор, який порівнює за цим ключем сортування. |
статичне порівняння компаратора (функційний ключExtractor, компаратор keyComparator) | Він приймає функцію, яка витягує ключ сортування з типу T, і повертає компаратор, який порівнює за цим ключем сортування за допомогою зазначеного компаратора. |
статичний компаратор comparingDouble(ToDoubleFunction keyExtractor) | Він приймає функцію, яка витягує ключ подвійного сортування з типу T, і повертає Comparator, який порівнює за цим ключем сортування. |
статичний компаратор comparingInt(ToIntFunction keyExtractor) | Він приймає функцію, яка витягує ключ сортування int з типу T, і повертає Comparator, який порівнює за цим ключем сортування. |
статичний компаратор comparingLong(ToLongFunction keyExtractor) | Він приймає функцію, яка витягує довгий ключ сортування з типу T, і повертає Comparator, який порівнює за цим ключем сортування. |
логічне значення дорівнює (Object obj) | Він використовується для порівняння поточного об'єкта з вказаним об'єктом. |
статичний | Він повертає компаратор, який порівнює порівнювані об’єкти в природному порядку. |
статичний компаратор nullsFirst(компаратор компаратора) | Він повертає компаратор, який розглядає null як менше, ніж ненульові елементи. |
статичний компаратор nullsLast(компаратор компаратора) | Він повертає компаратор, який розглядає null як більше, ніж ненульові елементи. |
Типовий компаратор reversed() | Він повертає компаратор, який містить зворотний порядок наданого компаратора. |
статичний | Він повертає компаратор, який містить зворотне до природного порядку. |
Типовий компаратор thenComparing (інший компаратор) | Він повертає компаратор лексикографічного порядку з іншим компаратором. |
за замовчуваннямComparator thenComparing(Function keyExtractor) | Він повертає компаратор лексикографічного порядку з функцією, яка витягує ключ сортування Comparable. |
Comparator за замовчуванням thenComparing(Function keyExtractor, Comparator keyComparator) | Він повертає компаратор лексикографічного порядку з функцією, яка виділяє ключ для порівняння з заданим компаратором. |
Типовий компаратор 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