logo

Java Comparator-grensesnitt

Java Comparator-grensesnitt brukes til å bestille objektene til en brukerdefinert klasse.

Dette grensesnittet finnes i pakken java.util og inneholder 2 metoder compare(Object obj1,Object obj2) og equals(Object element).

Det gir flere sorteringssekvenser, det vil si at du kan sortere elementene på grunnlag av et datamedlem, for eksempel rollno, navn, alder eller noe annet.

Metoder for Java Comparator Interface

MetodeBeskrivelse
public int compare(Object obj1, Object obj2)Den sammenligner det første objektet med det andre objektet.
offentlig boolsk lik(Object obj)Den brukes til å sammenligne gjeldende objekt med det angitte objektet.
offentlig boolsk lik(Object obj)Den brukes til å sammenligne gjeldende objekt med det angitte objektet.

Samlinger klasse

Samlinger klasse gir statiske metoder for å sortere elementene i en samling. Hvis samlingselementer er av Set eller Map, kan vi bruke TreeSet eller TreeMap. Vi kan imidlertid ikke sortere elementene i List. Samlinger-klassen gir også metoder for å sortere elementene i Liste-elementer.

Metode for samlinger-klassen for sortering av listeelementer

public void sort(listeliste, komparator c): brukes til å sortere elementene i List etter den gitte komparatoren.


Java-komparatoreksempel (ikke-generisk gammel stil)

La oss se eksemplet med å sortere elementene i List på grunnlag av alder og navn. I dette eksemplet har vi laget 4 java-klasser:

  1. Student.java
  2. AgeComparator.java
  3. NameComparator.java
  4. Simple.java
Student.java

Denne klassen inneholder tre felt rollno, navn og alder og en parameterisert konstruktør.

 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

Denne klassen definerer sammenligningslogikk basert på alder. Hvis alderen til det første objektet er større enn det andre, returnerer vi en positiv verdi. Det kan være hvem som helst som 1, 2, 10. Hvis alderen til det første objektet er mindre enn det andre objektet, returnerer vi en negativ verdi, det kan være en hvilken som helst negativ verdi, og hvis alderen til begge objektene er lik, vi returnerer 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

Denne klassen gir sammenligningslogikk basert på navnet. I slike tilfeller bruker vi compareTo()-metoden til String-klassen, som internt gir sammenligningslogikken.

 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); } } 
Simple.java

I denne klassen skriver vi ut verdiene til objektet ved å sortere på grunnlag av navn og alder.

 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 

Eksempel på Java-komparator (generisk)

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

Denne klassen gir sammenligningslogikk basert på navnet. I slike tilfeller bruker vi compareTo()-metoden til String-klassen, som internt gir sammenligningslogikken.

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

I denne klassen skriver vi ut verdiene til objektet ved å sortere på grunnlag av navn og alder.

 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-grensesnitt

Java 8 Comparator-grensesnitt er et funksjonelt grensesnitt som bare inneholder én abstrakt metode. Nå kan vi bruke Comparator-grensesnittet som tildelingsmål for et lambda-uttrykk eller metodereferanse.

Metoder for Java 8 Comparator Interface

MetodeBeskrivelse
int compare(T o1, T o2)Den sammenligner det første objektet med det andre objektet.
statiskComparator comparing (Function keyExtractor)Den godtar en funksjon som trekker ut en sammenlignbar sorteringsnøkkel fra en type T, og returnerer en komparator som sammenligner med den sorteringsnøkkelen.
statisk komparator-sammenligning (FunksjonstastExtractor, Comparator keyComparator)Den godtar en funksjon som trekker ut en sorteringsnøkkel fra en type T, og returnerer en komparator som sammenligner med den sorteringsnøkkelen ved å bruke den spesifiserte komparatoren.
static Comparator comparingDouble(ToDoubleFunction keyExtractor)Den godtar en funksjon som trekker ut en dobbel sorteringsnøkkel fra en type T, og returnerer en komparator som sammenligner med den sorteringsnøkkelen.
static Comparator comparingInt(ToIntFunction keyExtractor)Den godtar en funksjon som trekker ut en int-sorteringsnøkkel fra en type T, og returnerer en komparator som sammenligner med den sorteringsnøkkelen.
statisk komparator sammenlignerLong(ToLongFunction keyExtractor)Den godtar en funksjon som trekker ut en lang sorteringsnøkkel fra en type T, og returnerer en komparator som sammenligner med den sorteringsnøkkelen.
boolsk lik(Objekt obj)Den brukes til å sammenligne gjeldende objekt med det angitte objektet.
statiskComparator naturalOrder()Den returnerer en komparator som sammenligner sammenlignbare objekter i naturlig rekkefølge.
statisk komparator nullsFirst(komparator komparator)Den returnerer en komparator som behandler null til å være mindre enn ikke-null-elementer.
statisk komparator nullsLast(komparator komparator)Den returnerer en komparator som behandler null for å være større enn ikke-null-elementer.
standard komparator reversert()Den returnerer komparator som inneholder omvendt rekkefølge av den medfølgende komparatoren.
statiskKomparator reverseOrder()Den returnerer komparator som inneholder motsatt av naturlig rekkefølge.
standard Comparator thenComparing(Comparator other)Den returnerer en komparator med leksikografisk rekkefølge med en annen komparator.
misligholdeComparator thenComparing(Function keyExtractor)Den returnerer en komparator med leksikografisk rekkefølge med en funksjon som trekker ut en sammenlignbar sorteringsnøkkel.
standard Comparator thenComparing(Function keyExtractor, Comparator keyComparator)Den returnerer en komparator med leksikografisk rekkefølge med en funksjon som trekker ut en nøkkel som skal sammenlignes med den gitte komparatoren.
standard Comparator thenComparingDouble(ToDoubleFunction keyExtractor)Den returnerer en komparator med leksikografisk rekkefølge med en funksjon som trekker ut en dobbeltsorteringsnøkkel.
standard Comparator thenComparingInt(ToIntFunction keyExtractor)Den returnerer en komparator med leksikografisk rekkefølge med en funksjon som trekker ut en int sorteringsnøkkel.
standard Comparator thenComparingLong(ToLongFunction keyExtractor)Den returnerer en komparator med leksikografisk rekkefølge med en funksjon som trekker ut en lang sorteringsnøkkel.

Java 8 komparator eksempel

La oss se eksemplet med å sortere elementene i List på grunnlag av alder og navn.

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

Fil: 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 Eksempel: nullsFirst() og nullsLast() metoden

Her sorterer vi listen over elementer som også inneholder null.

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

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