logo

Java Comparator interfeiss

Java Comparator interfeiss tiek izmantots, lai sakārtotu lietotāja definētas klases objektus.

Šis interfeiss ir atrodams java.util pakotnē un satur 2 metodes, lai salīdzinātu (Object obj1,Object obj2) un vienāds (Object elements).

Tas nodrošina vairākas šķirošanas secības, t.i., jūs varat kārtot elementus, pamatojoties uz jebkuru datu dalībnieku, piemēram, rollno, vārdu, vecumu vai jebko citu.

Java komparatora saskarnes metodes

MetodeApraksts
publisks int salīdzināt (Objekts obj1, Object obj2)Tas salīdzina pirmo objektu ar otro objektu.
publiskais Būla vienāds (Objekta objekts)To izmanto, lai salīdzinātu pašreizējo objektu ar norādīto objektu.
publiskais Būla vienāds (Objekta objekts)To izmanto, lai salīdzinātu pašreizējo objektu ar norādīto objektu.

Kolekcijas klase

Kolekcijas klase nodrošina statiskas metodes kolekcijas elementu šķirošanai. Ja kolekcijas elementi ir Set vai Map, mēs varam izmantot TreeSet vai TreeMap. Tomēr mēs nevaram kārtot saraksta elementus. Kolekciju klase nodrošina metodes arī List tipa elementu elementu kārtošanai.

Kolekciju klases metode saraksta elementu kārtošanai

publisks void kārtot (saraksta saraksts, salīdzinājums c): tiek izmantots, lai kārtotu saraksta elementus pēc dotā Comparator.


Java salīdzinājuma piemērs (nevis vispārīgs vecais stils)

Apskatīsim piemēru par saraksta elementu kārtošanu pēc vecuma un vārda. Šajā piemērā mēs esam izveidojuši 4 java klases:

  1. Student.java
  2. AgeComparator.java
  3. NameComparator.java
  4. Vienkāršs.java
Student.java

Šajā klasē ir trīs lauki rollno, nosaukums un vecums, kā arī parametrizēts konstruktors.

 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

Šī klase nosaka salīdzināšanas loģiku, pamatojoties uz vecumu. Ja pirmā objekta vecums ir lielāks par otro, mēs atgriežam pozitīvu vērtību. Tas var būt jebkurš, piemēram, 1, 2, 10. Ja pirmā objekta vecums ir mazāks nekā otrā objekta vecums, mēs atgriežam negatīvu vērtību, tā var būt jebkura negatīva vērtība, un, ja abu objektu vecums ir vienāds, mēs atgriežam 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

Šī klase nodrošina salīdzināšanas loģiku, pamatojoties uz nosaukumu. Šādā gadījumā mēs izmantojam String klases metodi salīdzinātTo(), kas iekšēji nodrošina salīdzināšanas loģiku.

 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); } } 
Vienkāršs.java

Šajā klasē mēs drukājam objekta vērtības, šķirojot pēc nosaukuma un vecuma.

 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 salīdzinājuma piemērs (vispārējs)

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

Šī klase nodrošina salīdzināšanas loģiku, pamatojoties uz nosaukumu. Šādā gadījumā mēs izmantojam String klases metodi salīdzinātTo(), kas iekšēji nodrošina salīdzināšanas loģiku.

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

Šajā klasē mēs drukājam objekta vērtības, šķirojot pēc nosaukuma un vecuma.

 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 interfeiss

Java 8 Comparator interfeiss ir funkcionāls interfeiss, kas satur tikai vienu abstraktu metodi. Tagad mēs varam izmantot Comparator saskarni kā lambda izteiksmes vai metodes atsauces piešķiršanas mērķi.

Java 8 komparatora saskarnes metodes

MetodeApraksts
int salīdzināt (T o1, T o2)Tas salīdzina pirmo objektu ar otro objektu.
statisksSalīdzinājuma salīdzināšana (funkciju taustiņu izvilkšana)Tā pieņem funkciju, kas izvelk salīdzināmo kārtošanas atslēgu no tipa T, un atgriež salīdzinājumu, kas salīdzina pēc šīs kārtošanas atslēgas.
statiskā salīdzinājuma salīdzināšana (funkciju taustiņu izvilkšana, salīdzināšanas atslēgas salīdzināšana)Tā pieņem funkciju, kas izvelk kārtošanas atslēgu no tipa T, un atgriež Comparator, kas salīdzina pēc šīs kārtošanas atslēgas, izmantojot norādīto Comparator.
statisks Comparator ComparingDouble (ToDoubleFunction keyExtractor)Tā pieņem funkciju, kas no T tipa izņem dubulto kārtošanas atslēgu, un atgriež salīdzinājumu, kas salīdzina pēc šīs kārtošanas atslēgas.
statisks Comparator comparingInt (ToIntFunction keyExtractor)Tā pieņem funkciju, kas izvelk int kārtošanas atslēgu no tipa T, un atgriež Comparator, kas salīdzina pēc šīs kārtošanas atslēgas.
statisks Comparator ComparingLong (ToLongFunction keyExtractor)Tā pieņem funkciju, kas no T tipa izvelk garu kārtošanas atslēgu, un atgriež salīdzinājumu, kas salīdzina pēc šīs kārtošanas atslēgas.
Būla ir vienāds (Objekta objekts)To izmanto, lai salīdzinātu pašreizējo objektu ar norādīto objektu.
statisksSalīdzinātājs naturalOrder()Tas atgriež salīdzinātāju, kas salīdzina salīdzināmus objektus dabiskā secībā.
statisks Comparator nullsFirst(salīdzināšanas salīdzinājums)Tas atgriež salīdzinājumu, kas uzskata, ka null ir mazāks par elementiem, kas nav nulles.
statisks Comparator nullsLast(salīdzināšanas komparators)Tas atgriež salīdzinājumu, kas nulli uzskata par lielāku par elementiem, kas nav nulles.
noklusējuma Comparator reversed()Tas atgriež salīdzinātāju, kas satur nodrošinātā salīdzinājuma apgriezto secību.
statisksSalīdzinātājs reverseOrder()Tas atgriež salīdzinājumu, kurā ir apgriezta dabiskā secība.
noklusējuma salīdzinājums, tad salīdzinājums (cits salīdzinājums)Tas atgriež leksikogrāfiskās kārtas salīdzinātāju ar citu salīdzinājumu.
noklusējumaSalīdzinātājs, pēc tam salīdzināšana (funkciju taustiņu izvilkējs)Tas atgriež leksikogrāfiskās secības salīdzinātāju ar funkciju, kas izvelk salīdzināmās kārtošanas atslēgu.
noklusējuma salīdzinājums, pēc tam salīdzināšana (funkciju taustiņu izvilkējs, salīdzināšanas atslēgas salīdzinājums)Tas atgriež leksikogrāfiskās kārtas salīdzinātāju ar funkciju, kas izvelk atslēgu, kas jāsalīdzina ar doto Comparator.
noklusējuma Comparator thenComparingDouble (ToDoubleFunction keyExtractor)Tas atgriež leksikogrāfiskās secības salīdzinājumu ar funkciju, kas iegūst dubultās kārtošanas atslēgu.
noklusējuma Comparator thenComparingInt(ToIntFunction keyExtractor)Tas atgriež leksikogrāfiskās secības salīdzinātāju ar funkciju, kas izvelk int kārtošanas atslēgu.
noklusējuma Comparator then ComparingLong (ToLongFunction keyExtractor)Tas atgriež leksikogrāfiskās secības salīdzinātāju ar funkciju, kas izvelk garu kārtošanas taustiņu.

Java 8 salīdzinājuma piemērs

Apskatīsim piemēru par saraksta elementu kārtošanu pēc vecuma un vārda.

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

Fails: 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 Piemērs: nullsFirst() un nullsLast() metode

Šeit mēs sakārtojam to elementu sarakstu, kas satur arī nulli.

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

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