Интерфейс на Java Comparator се използва за подреждане на обектите на дефиниран от потребителя клас.
Този интерфейс се намира в пакета java.util и съдържа 2 метода compare(Object obj1,Object obj2) и equals(Object element).
Той предоставя множество последователности за сортиране, т.е. можете да сортирате елементите на базата на всеки член от данни, например rollno, име, възраст или нещо друго.
Методи на Java Comparator Interface
Метод | Описание |
---|---|
public int compare(Object obj1, Object obj2) | Той сравнява първия обект с втория обект. |
публичен булев е равен (Object obj) | Използва се за сравняване на текущия обект с посочения обект. |
публичен булев е равен (Object obj) | Използва се за сравняване на текущия обект с посочения обект. |
Метод | Описание |
---|---|
int compare(T o1, T o2) | Той сравнява първия обект с втория обект. |
статичен | Той приема функция, която извлича ключ за сортиране Comparable от тип T и връща Comparator, който сравнява по този ключ за сортиране. |
сравняване на статичен компаратор (функционален ключExtractor, компараторен ключComparator) | Той приема функция, която извлича ключ за сортиране от тип T и връща Comparator, който сравнява по този ключ за сортиране, използвайки посочения Comparator. |
статичен компаратор comparingDouble(ToDoubleFunction keyExtractor) | Той приема функция, която извлича двоен ключ за сортиране от тип T и връща Comparator, който сравнява по този ключ за сортиране. |
статичен компаратор comparingInt(ToIntFunction keyExtractor) | Той приема функция, която извлича int ключ за сортиране от тип T и връща Comparator, който сравнява по този ключ за сортиране. |
статичен компаратор comparingLong(ToLongFunction keyExtractor) | Той приема функция, която извлича дълъг ключ за сортиране от тип T и връща Comparator, който сравнява по този ключ за сортиране. |
булево равно (Object obj) | Използва се за сравняване на текущия обект с посочения обект. |
статичен | Той връща компаратор, който сравнява сравними обекти в естествен ред. |
статичен компаратор nullsFirst(компаратор за сравнение) | Той връща компаратор, който третира null като по-малко от ненулевите елементи. |
статичен Comparator nullsLast(Comparator comparator) | Той връща компаратор, който третира null като по-голям от не-null елементи. |
Comparator по подразбиране обърнат() | Връща компаратор, който съдържа обратен ред на предоставения компаратор. |
статичен | Връща компаратор, който съдържа обратен на естествения ред. |
Comparator по подразбиране thenComparing (Comparator other) | Той връща компаратор за лексикографски ред с друг компаратор. |
по подразбиранеComparator thenComparing(Function keyExtractor) | Той връща компаратор за лексикографски ред с функция, която извлича ключ за сортиране на Comparable. |
Comparator по подразбиране thenComparing(Function keyExtractor, Comparator keyComparator) | Той връща компаратор на лексикографски ред с функция, която извлича ключ за сравнение с дадения компаратор. |
Comparator по подразбиране thenComparingDouble(ToDoubleFunction keyExtractor) | Той връща компаратор за лексикографски ред с функция, която извлича ключ за двойно сортиране. |
Comparator по подразбиране thenComparingInt(ToIntFunction keyExtractor) | Той връща компаратор за лексикографски ред с функция, която извлича int ключ за сортиране. |
Comparator по подразбиране 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