Rozhraní Java Comparator se používá k řazení objektů uživatelem definované třídy.
Toto rozhraní se nachází v balíčku java.util a obsahuje 2 metody Compare(Object obj1,Object obj2) a equals(Object element).
Poskytuje více třídicích sekvencí, tj. můžete třídit prvky na základě libovolného datového členu, například rollno, jméno, věk nebo cokoli jiného.
Metody rozhraní Java Comparator
Metoda | Popis |
---|---|
public int porovnat (Object obj1, Object obj2) | Porovnává první objekt s druhým objektem. |
public boolean rovná se (Object obj) | Slouží k porovnání aktuálního objektu se zadaným objektem. |
public boolean rovná se (Object obj) | Slouží k porovnání aktuálního objektu se zadaným objektem. |
Metoda | Popis |
---|---|
int srovnání (T o1, T o2) | Porovnává první objekt s druhým objektem. |
statický | Přijímá funkci, která extrahuje srovnatelný třídicí klíč z typu T a vrací komparátor, který porovnává podle tohoto třídícího klíče. |
statické porovnávání komparátoru (Function keyExtractor, Comparator keyComparator) | Přijímá funkci, která extrahuje třídicí klíč z typu T a vrací komparátor, který porovnává podle tohoto třídícího klíče pomocí zadaného komparátoru. |
statický komparátor comparingDouble (ToDoubleFunction keyExtractor) | Přijímá funkci, která extrahuje dvojitý třídicí klíč z typu T a vrací komparátor, který porovnává podle tohoto třídícího klíče. |
statický komparátor comparingInt(ToIntFunction keyExtractor) | Přijímá funkci, která extrahuje klíč řazení int z typu T a vrací komparátor, který porovnává podle tohoto klíče řazení. |
statický komparátor comparingLong(ToLongFunction keyExtractor) | Přijímá funkci, která extrahuje dlouhý klíč řazení z typu T a vrací komparátor, který porovnává podle tohoto klíče řazení. |
boolean rovná se (objekt objektu) | Slouží k porovnání aktuálního objektu se zadaným objektem. |
statický | Vrací komparátor, který porovnává srovnatelné objekty v přirozeném pořadí. |
statický komparátor nullsFirst (komparátor komparátor) | Vrací komparátor, který považuje hodnotu null za méně než nenulové prvky. |
statický komparátor nullsLast(komparátor komparátor) | Vrací komparátor, který považuje hodnotu null za větší než prvky bez hodnoty null. |
výchozí komparátor reversed() | Vrací komparátor, který obsahuje opačné pořadí poskytnutého komparátoru. |
statický | Vrací komparátor, který obsahuje opak přirozeného uspořádání. |
výchozí komparátor thenComparing(porovnávač jiné) | Vrací komparátor lexikografického řádu s jiným komparátorem. |
výchozíComparator thenComparing (Function keyExtractor) | Vrací komparátor lexikografického pořadí s funkcí, která extrahuje srovnatelný třídicí klíč. |
výchozí komparátor thenComparing(funkce keyExtractor, komparátor keyComparator) | Vrací komparátor lexikografického řádu s funkcí, která extrahuje klíč, který má být porovnán s daným komparátorem. |
výchozí komparátor thenComparingDouble(ToDoubleFunction keyExtractor) | Vrací komparátor lexikografického pořadí s funkcí, která extrahuje dvojitý klíč řazení. |
výchozí komparátor thenComparingInt(ToIntFunction keyExtractor) | Vrací komparátor lexikografického pořadí s funkcí, která extrahuje klíč řazení int. |
výchozí komparátor thenComparingLong(ToLongFunction keyExtractor) | Vrací komparátor lexikografického pořadí s funkcí, která extrahuje dlouhý klíč řazení. |
Příklad komparátoru Java 8
Podívejme se na příklad řazení prvků Seznamu na základě věku a jména.
Soubor: 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; } }
Soubor: 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 Comparator Příklad: metoda nullsFirst() a nullsLast().
Zde seřadíme seznam prvků, který také obsahuje null.
Soubor: 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; } }
Soubor: 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