logo

Vmesnik Java Comparator

Vmesnik Java Comparator se uporablja za urejanje objektov uporabniško definiranega razreda.

Ta vmesnik je v paketu java.util in vsebuje 2 metodi compare(Object obj1,Object obj2) in equals(Object element).

Omogoča več zaporedij razvrščanja, kar pomeni, da lahko elemente razvrstite na podlagi katerega koli podatkovnega člana, na primer rollno, ime, starost ali karkoli drugega.

Metode vmesnika Java Comparator

MetodaOpis
public int compare(Object obj1, Object obj2)Primerja prvi objekt z drugim objektom.
javno logično je enako (objekt obj)Uporablja se za primerjavo trenutnega predmeta z navedenim objektom.
javno logično je enako (objekt obj)Uporablja se za primerjavo trenutnega predmeta z navedenim objektom.

Razred zbirk

Zbirke ponuja statične metode za razvrščanje elementov zbirke. Če so elementi zbirke Set ali Map, lahko uporabimo TreeSet ali TreeMap. Vendar elementov seznama ne moremo razvrstiti. Razred Zbirke ponuja tudi metode za razvrščanje elementov elementov tipa List.

Metoda razreda Collections za razvrščanje elementov seznama

javno razvrščanje void (seznam seznama, primerjalnik c): se uporablja za razvrščanje elementov Seznama po danem primerjalniku.


Primer primerjalnika Java (negenerični stari slog)

Oglejmo si primer razvrščanja elementov seznama na podlagi starosti in imena. V tem primeru smo ustvarili 4 razrede java:

  1. Študent.java
  2. AgeComparator.java
  3. ImeComparator.java
  4. Simple.java
Študent.java

Ta razred vsebuje tri polja rollno, ime in starost ter parametriran konstruktor.

 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

Ta razred določa primerjalno logiko glede na starost. Če je starost prvega predmeta večja od starosti drugega, vrnemo pozitivno vrednost. To je lahko katera koli, na primer 1, 2, 10. Če je starost prvega predmeta manjša od starosti drugega predmeta, vrnemo negativno vrednost, lahko je katera koli negativna vrednost, in če je starost obeh predmetov enaka, vračamo 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

Ta razred nudi logiko primerjave na podlagi imena. V takem primeru uporabljamo metodo compareTo() razreda String, ki interno zagotavlja primerjalno logiko.

 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

V tem razredu izpisujemo vrednosti objekta z razvrščanjem na podlagi imena in starosti.

 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 

Primer primerjalnika Java (generično)

Študent.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

Ta razred nudi logiko primerjave na podlagi imena. V takem primeru uporabljamo metodo compareTo() razreda String, ki interno zagotavlja primerjalno logiko.

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

V tem razredu izpisujemo vrednosti objekta z razvrščanjem na podlagi imena in starosti.

 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 

Vmesnik Java 8 Comparator

Vmesnik Java 8 Comparator je funkcionalen vmesnik, ki vsebuje samo eno abstraktno metodo. Zdaj lahko uporabimo vmesnik Comparator kot cilj dodelitve za lambda izraz ali referenco metode.

Metode vmesnika primerjalnika Java 8

MetodaOpis
int primerjava (T o1, T o2)Primerja prvi objekt z drugim objektom.
statičnaPrimerjava primerjalnika (Function keyExtractor)Sprejme funkcijo, ki izvleče primerljiv ključ za razvrščanje iz tipa T, in vrne primerjalnik, ki primerja s tem ključem za razvrščanje.
primerjava statičnega primerjalnika (Function keyExtractor, Comparator keyComparator)Sprejme funkcijo, ki izvleče ključ za razvrščanje iz vrste T, in vrne primerjalnik, ki primerja s tem ključem za razvrščanje z uporabo navedenega primerjalnika.
statični primerjalnik comparingDouble(ToDoubleFunction keyExtractor)Sprejme funkcijo, ki izvleče dvojni ključ za razvrščanje iz tipa T, in vrne primerjalnik, ki primerja s tem ključem za razvrščanje.
statični primerjalnik comparingInt(ToIntFunction keyExtractor)Sprejme funkcijo, ki izvleče ključ za razvrščanje int iz tipa T in vrne primerjalnik, ki primerja s tem ključem za razvrščanje.
statični primerjalnik comparingLong(ToLongFunction keyExtractor)Sprejme funkcijo, ki izvleče dolg ključ za razvrščanje iz tipa T, in vrne primerjalnik, ki primerja s tem ključem za razvrščanje.
logično je enako (objekt obj)Uporablja se za primerjavo trenutnega predmeta z navedenim objektom.
statičnaPrimerjalnik naturalOrder()Vrne primerjalnik, ki primerja primerljive predmete v naravnem vrstnem redu.
statični primerjalnik nullsFirst(primerjalnik primerjalnika)Vrne primerjalnik, ki meni, da je nič manj kot elementi, ki niso ničelni.
statični primerjalnik nullsLast(primerjalnik primerjalnika)Vrne primerjalnik, ki meni, da je nič večja od neničelnih elementov.
privzeti primerjalnik obrnjen()Vrne primerjalnik, ki vsebuje obratni vrstni red navedenega primerjalnika.
statičnaPrimerjalnik obratni vrstni red()Vrne primerjalnik, ki vsebuje obratni vrstni red od naravnega.
privzeti primerjalnik thenComparing(primerjalnik drugo)Vrne primerjalnik leksikografskega reda z drugim primerjalnikom.
privzetoPrimerjalnik, nato primerjava (Extractor funkcijskih tipk)Vrne primerjalnik leksikografskega reda s funkcijo, ki ekstrahira Primerljiv razvrstitveni ključ.
privzeti primerjalnik thenComparing(Function keyExtractor, Comparator keyComparator)Vrne primerjalnik leksikografskega reda s funkcijo, ki izlušči ključ za primerjavo z danim primerjalnikom.
privzeti primerjalnik thenComparingDouble(ToDoubleFunction keyExtractor)Vrne primerjalnik leksikografskega reda s funkcijo, ki ekstrahira dvojni ključ za razvrščanje.
privzeti primerjalnik thenComparingInt(ToIntFunction keyExtractor)Vrne primerjalnik leksikografskega reda s funkcijo, ki ekstrahira ključ za razvrščanje int.
privzeti primerjalnik thenComparingLong(ToLongFunction keyExtractor)Vrne primerjalnik leksikografskega reda s funkcijo, ki ekstrahira dolg razvrstitveni ključ.

Primer primerjalnika Java 8

Oglejmo si primer razvrščanja elementov seznama na podlagi starosti in imena.

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

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

Primer primerjalnika Java 8: metoda nullsFirst() in nullsLast().

Tukaj razvrstimo seznam elementov, ki vsebujejo tudi nič.

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

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