logo

Java Comparator käyttöliittymä

Java Comparator käyttöliittymä käytetään järjestämään käyttäjän määrittämän luokan objektit.

Tämä käyttöliittymä löytyy java.util-paketista ja sisältää 2 menetelmää vertaa (Object obj1,Object obj2) ja equals (Object element).

Se tarjoaa useita lajittelusarjoja, eli voit lajitella elementit minkä tahansa tietojäsenen perusteella, esimerkiksi rollno, nimi, ikä tai jokin muu.

Java-vertailurajapinnan menetelmät

MenetelmäKuvaus
julkinen int vertaa (Object obj1, Object obj2)Se vertaa ensimmäistä objektia toiseen objektiin.
julkinen looginen yhtälö (Objektiobjekti)Sitä käytetään nykyisen objektin vertaamiseen määritettyyn objektiin.
julkinen looginen yhtälö (Objektiobjekti)Sitä käytetään nykyisen objektin vertaamiseen määritettyyn objektiin.

Kokoelmat luokka

Kokoelmat luokka tarjoaa staattisia menetelmiä kokoelman elementtien lajitteluun. Jos kokoelmaelementit ovat Set tai Map, voimme käyttää TreeSet tai TreeMap. Emme kuitenkaan voi lajitella Listan elementtejä. Kokoelmat-luokka tarjoaa menetelmiä myös List-tyyppisten elementtien elementtien lajitteluun.

Method of Collections -luokka List-elementtien lajitteluun

public void sort (List list, Comparator c): käytetään lajittelemaan Listan elementit annetun vertailijan mukaan.


Java-vertailuesimerkki (ei-yleinen vanha tyyli)

Katsotaanpa esimerkkiä Listan elementtien lajittelusta iän ja nimen perusteella. Tässä esimerkissä olemme luoneet 4 java-luokkaa:

  1. Opiskelija.java
  2. AgeComparator.java
  3. NameComparator.java
  4. Yksinkertainen.java
Opiskelija.java

Tämä luokka sisältää kolme kenttää rollno, nimi ja ikä sekä parametroidun konstruktorin.

 class Student{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } } 
AgeComparator.java

Tämä luokka määrittelee vertailulogiikan iän perusteella. Jos ensimmäisen kohteen ikä on suurempi kuin toisen, palautamme positiivisen arvon. Se voi olla mikä tahansa, kuten 1, 2, 10. Jos ensimmäisen objektin ikä on pienempi kuin toisen, palautamme negatiivisen arvon, se voi olla mikä tahansa negatiivinen arvo, ja jos molempien objektien ikä on sama, palaamme 0.

 import java.util.*; class AgeComparator implements Comparator{ public int compare(Object o1,Object o2){ Student s1=(Student)o1; Student s2=(Student)o2; if(s1.age==s2.age) return 0; else if(s1.age>s2.age) return 1; else return -1; } } 
NameComparator.java

Tämä luokka tarjoaa vertailulogiikkaa nimen perusteella. Tässä tapauksessa käytämme String-luokan vertaaTo()-menetelmää, joka tarjoaa sisäisesti vertailulogiikan.

 import java.util.*; class NameComparator implements Comparator{ public int compare(Object o1,Object o2){ Student s1=(Student)o1; Student s2=(Student)o2; return s1.name.compareTo(s2.name); } } 
Yksinkertainen.java

Tällä luokalla tulostetaan kohteen arvot lajittelemalla nimen ja iän perusteella.

 import java.util.*; import java.io.*; class Simple{ 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)); System.out.println('Sorting by Name'); Collections.sort(al,new NameComparator()); Iterator itr=al.iterator(); while(itr.hasNext()){ Student st=(Student)itr.next(); System.out.println(st.rollno+' '+st.name+' '+st.age); } System.out.println('Sorting by age'); Collections.sort(al,new AgeComparator()); Iterator itr2=al.iterator(); while(itr2.hasNext()){ Student st=(Student)itr2.next(); 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-vertailuesimerkki (yleinen)

Opiskelija.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; } } 
AgeComparator.java
 import java.util.*; class AgeComparator implements Comparator{ public int compare(Student s1,Student s2){ if(s1.age==s2.age) return 0; else if(s1.age>s2.age) return 1; else return -1; } } 
NameComparator.java

Tämä luokka tarjoaa vertailulogiikkaa nimen perusteella. Tässä tapauksessa käytämme String-luokan vertaaTo()-menetelmää, joka tarjoaa sisäisesti vertailulogiikan.

 import java.util.*; class NameComparator implements Comparator{ public int compare(Student s1,Student s2){ return s1.name.compareTo(s2.name); } } 
Yksinkertainen.java

Tällä luokalla tulostetaan kohteen arvot lajittelemalla nimen ja iän perusteella.

 import java.util.*; import java.io.*; class Simple{ 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)); System.out.println('Sorting by Name'); Collections.sort(al,new NameComparator()); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } System.out.println('Sorting by age'); Collections.sort(al,new AgeComparator()); 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 -liittymä

Java 8 Comparator -käyttöliittymä on toiminnallinen käyttöliittymä, joka sisältää vain yhden abstraktin menetelmän. Nyt voimme käyttää Comparator-liitäntää lambda-lausekkeen tai menetelmäviittauksen määrityskohteena.

Java 8 -vertailurajapinnan menetelmät

MenetelmäKuvaus
int vertaa (T o1, T o2)Se vertaa ensimmäistä objektia toiseen objektiin.
staattinenVertailun vertailu (Function keyExtractor)Se hyväksyy funktion, joka poimii verrattavan lajitteluavaimen tyypistä T, ja palauttaa vertailun, joka vertaa tällä lajitteluavaimella.
staattinen Comparator-vertailu (Function keyExtractor, Comparator keyComparator)Se hyväksyy funktion, joka poimii lajitteluavaimen tyypistä T, ja palauttaa vertailijan, joka vertaa kyseisellä lajitteluavaimella määritettyä vertailijaa käyttäen.
Static Comparator comparingDouble (ToDoubleFunction keyExtractor)Se hyväksyy funktion, joka poimii kaksoislajitteluavaimen tyypistä T, ja palauttaa vertailun, joka vertaa tällä lajitteluavaimella.
staattinen Comparator comparingInt(ToIntFunction keyExtractor)Se hyväksyy funktion, joka poimii int-lajitteluavaimen tyypistä T, ja palauttaa vertailijan, joka vertaa tällä lajitteluavaimella.
staattinen Comparator ComparingLong (ToLongFunction keyExtractor)Se hyväksyy funktion, joka poimii pitkän lajitteluavaimen tyypistä T, ja palauttaa vertailun, joka vertaa tällä lajitteluavaimella.
boolen yhtä kuin (Objektiobjekti)Sitä käytetään nykyisen objektin vertaamiseen määritettyyn objektiin.
staattinenVertaile naturalOrder()Se palauttaa vertailijan, joka vertaa vertailukelpoisia objekteja luonnollisessa järjestyksessä.
staattinen Comparator nullsFirst(Comparator Comparator)Se palauttaa vertailijan, joka käsittelee nollaa pienempänä kuin ei-nolla-elementtejä.
staattinen Comparator nullsLast(vertailija)Se palauttaa vertailijan, joka pitää nolla-arvoa suurempana kuin ei-nolla-elementit.
oletusvertailija käännetty()Se palauttaa vertailijan, joka sisältää toimitetun vertailijan käänteisen järjestyksen.
staattinenVertailija reverseOrder()Se palauttaa vertailijan, joka sisältää käänteisen luonnollisen järjestyksen.
oletusvertailija sittenVertailu (vertailija muu)Se palauttaa leksikografisen järjestyksen vertailijan toisen vertailijan kanssa.
oletuksenaVertailu ja vertaaminen (Funktion keyExtractor)Se palauttaa leksikografisen järjestyksen vertailijan funktiolla, joka poimii vertailuavaimen.
oletusvertailija sittenVertailu (Function keyExtractor, Comparator keyComparator)Se palauttaa leksikografisen järjestyksen vertailijan, jossa on funktio, joka poimii avaimen, jota voidaan verrata annettuun vertailijaan.
oletuksena Comparator thenComparingDouble (ToDoubleFunction keyExtractor)Se palauttaa leksikografisen järjestyksen vertailijan funktiolla, joka poimii kaksoislajitteluavaimen.
oletusvertailija sittenComparingInt(ToIntFunction keyExtractor)Se palauttaa leksikografisen järjestyksen vertailijan funktiolla, joka poimii int-lajitteluavaimen.
oletuksena Comparator thenComparingLong(ToLongFunction keyExtractor)Se palauttaa leksikografisen järjestyksen vertailijan funktiolla, joka poimii pitkän lajitteluavaimen.

Esimerkki Java 8 -vertailusta

Katsotaanpa esimerkkiä Listan elementtien lajittelusta iän ja nimen perusteella.

Tiedosto: 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; } } 

Tiedosto: 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 Esimerkki: nullsFirst() ja nullsLast() -metodi

Täällä lajittelemme luettelon elementeistä, jotka sisältävät myös null.

Tiedosto: 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; } } 

Tiedosto: 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