Rozhranie Java Comparator sa používa na usporiadanie objektov užívateľom definovanej triedy.
Toto rozhranie sa nachádza v balíku java.util a obsahuje 2 metódy Compare(Object obj1,Object obj2) a equals(Object element).
Poskytuje viacero triediacich sekvencií, t.j. prvky môžete triediť na základe ľubovoľného dátového člena, napríklad rollno, meno, vek alebo čokoľvek iné.
Metódy rozhrania Java Comparator Interface
Metóda | Popis |
---|---|
public int porovnanie (Object obj1, Object obj2) | Porovnáva prvý objekt s druhým objektom. |
verejný boolovský rovná sa (objekt objektu) | Používa sa na porovnanie aktuálneho objektu so zadaným objektom. |
verejný boolovský rovná sa (objekt objektu) | Používa sa na porovnanie aktuálneho objektu so zadaným objektom. |
Metóda | Popis |
---|---|
int porovnanie (T o1, T o2) | Porovnáva prvý objekt s druhým objektom. |
statické | Prijíma funkciu, ktorá extrahuje porovnateľný triediaci kľúč z typu T a vráti komparátor, ktorý porovnáva podľa tohto triediaceho kľúča. |
statické porovnávanie komparátora (funkcia keyExtractor, komparátor keyComparator) | Prijíma funkciu, ktorá extrahuje triediaci kľúč z typu T a vracia komparátor, ktorý porovnáva podľa tohto triediaceho kľúča pomocou zadaného komparátora. |
statický komparátor porovnávanieDouble(ToDoubleFunction keyExtractor) | Prijíma funkciu, ktorá extrahuje dvojitý triediaci kľúč z typu T a vracia komparátor, ktorý porovnáva podľa tohto triediaceho kľúča. |
statický komparátor comparingInt(ToIntFunction keyExtractor) | Prijíma funkciu, ktorá extrahuje triediaci kľúč int z typu T a vracia komparátor, ktorý porovnáva podľa tohto triediaceho kľúča. |
statický komparátor comparingLong(ToLongFunction keyExtractor) | Prijíma funkciu, ktorá extrahuje dlhý triediaci kľúč z typu T a vracia komparátor, ktorý porovnáva podľa tohto triediaceho kľúča. |
boolean rovná sa (objekt objektu) | Používa sa na porovnanie aktuálneho objektu so zadaným objektom. |
statické | Vracia komparátor, ktorý porovnáva porovnateľné objekty v prirodzenom poradí. |
statický komparátor nullsFirst (porovnávač komparátora) | Vracia komparátor, ktorý považuje hodnotu null za menej ako nenulové prvky. |
statický komparátor nullsLast(porovnávač komparátora) | Vráti komparátor, ktorý považuje hodnotu null za väčšiu ako nenulové prvky. |
predvolený komparátor obrátený () | Vráti komparátor, ktorý obsahuje opačné poradie poskytnutého komparátora. |
statické | Vráti komparátor, ktorý obsahuje opačné prirodzené usporiadanie. |
predvolený porovnávač potom porovnávanie (porovnávač iné) | Vracia lexikograficko-poradový komparátor s iným komparátorom. |
predvolenáKomparátor a potom porovnanie (Extractor funkčných kláves) | Vracia komparátor lexikografického poradia s funkciou, ktorá extrahuje porovnávací kľúč triedenia. |
predvolený komparátor potom porovnanie(funkcia keyExtractor, komparátor keyComparator) | Vracia komparátor lexikografického poriadku s funkciou, ktorá extrahuje kľúč na porovnanie s daným komparátorom. |
predvolený komparátor thenComparingDouble(ToDoubleFunction keyExtractor) | Vracia komparátor lexikografického poradia s funkciou, ktorá extrahuje dvojitý kľúč triedenia. |
predvolený komparátor thenComparingInt(ToIntFunction keyExtractor) | Vracia komparátor lexikografického poradia s funkciou, ktorá extrahuje kľúč triedenia int. |
predvolený komparátor thenComparingLong(ToLongFunction keyExtractor) | Vracia komparátor lexikografického poradia s funkciou, ktorá extrahuje dlhý kľúč triedenia. |
Príklad komparátora Java 8
Pozrime sa na príklad triedenia prvkov Zoznamu na základe veku a mena.
Súbor: 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; } }
Súbor: 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 Príklad: metóda nullsFirst() a nullsLast().
Tu triedime zoznam prvkov, ktorý tiež obsahuje null.
Súbor: 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; } }
Súbor: 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