logo

Java Comparator felület

Java Comparator felület egy felhasználó által definiált osztály objektumainak rendezésére szolgál.

Ez az interfész a java.util csomagban található, és 2 összehasonlító (Object obj1,Object obj2) és equals (Object element) metódust tartalmaz.

Többféle rendezési sorrendet biztosít, azaz az elemeket tetszőleges adattag alapján rendezheti, például rollno, név, életkor vagy bármi más alapján.

A Java összehasonlító felület módszerei

MódszerLeírás
publikus int összehasonlítás (objektum objektum1, objektum obj2)Összehasonlítja az első objektumot a második objektummal.
nyilvános logikai egyenlő (Obj. objektum)Az aktuális objektum és a megadott objektum összehasonlítására szolgál.
nyilvános logikai egyenlő (Obj. objektum)Az aktuális objektum és a megadott objektum összehasonlítására szolgál.

Gyűjtemények osztály

Gyűjtemények osztály statikus módszereket biztosít egy gyűjtemény elemeinek rendezésére. Ha a gyűjtemény elemei Set vagy Map elemek, használhatjuk a TreeSet vagy a TreeMap alkalmazást. A Lista elemeit azonban nem tudjuk rendezni. A Collections osztály módszereket biztosít a Lista típusú elemek elemeinek rendezésére is.

A Collections osztály módszere a listaelemek rendezésére

public void rendezés (Lista lista, Összehasonlító c): A Lista elemeinek rendezésére szolgál az adott Összehasonlító szerint.


Java összehasonlító példa (nem általános régi stílusú)

Lássuk a Lista elemeinek életkor és név szerinti rendezési példáját. Ebben a példában 4 Java osztályt hoztunk létre:

  1. Diák.java
  2. AgeComparator.java
  3. NameComparator.java
  4. Egyszerű.java
Diák.java

Ez az osztály három rollno mezőt, nevet és kort, valamint egy paraméterezett konstruktort tartalmaz.

 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

Ez az osztály az életkor alapján határozza meg az összehasonlítási logikát. Ha az első objektum életkora nagyobb, mint a másodiké, akkor pozitív értéket adunk vissza. Bármilyen lehet, például 1, 2, 10. Ha az első objektum kora kisebb, mint a másodiké, akkor negatív értéket adunk vissza, ez bármilyen negatív érték lehet, és ha mindkét objektum életkora egyenlő, 0-t adunk vissza.

 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

Ez az osztály összehasonlítási logikát biztosít a név alapján. Ebben az esetben a String osztály Összehasonlítási () metódusát használjuk, amely belsőleg biztosítja az összehasonlítási logikát.

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

Ebben az osztályban név és életkor alapján rendezve nyomtatjuk ki az objektum értékeit.

 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 összehasonlító példa (általános)

Diák.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

Ez az osztály összehasonlítási logikát biztosít a név alapján. Ebben az esetben a String osztály Összehasonlítási () metódusát használjuk, amely belsőleg biztosítja az összehasonlítási logikát.

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

Ebben az osztályban név és életkor alapján rendezve nyomtatjuk ki az objektum értékeit.

 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 felület

A Java 8 Comparator interfész egy funkcionális interfész, amely csak egy absztrakt metódust tartalmaz. Most már használhatjuk a Comparator felületet a lambda kifejezés vagy metódushivatkozás hozzárendelési célpontjaként.

A Java 8 összehasonlító felület módszerei

MódszerLeírás
int összehasonlítás (T o1, T o2)Összehasonlítja az első objektumot a második objektummal.
statikusÖsszehasonlító összehasonlítás (Function keyExtractor)Elfogad egy függvényt, amely kivon egy összehasonlítható rendezési kulcsot a T típusúból, és visszaad egy összehasonlító kulcsot, amely ezzel a rendezési kulccsal hasonlít össze.
statikus összehasonlító összehasonlítás (Function keyExtractor, Comparator keyComparator)Elfogad egy függvényt, amely kivon egy T típusú rendezési kulcsot, és visszaad egy Comparatort, amely az adott rendezési kulccsal összehasonlít a megadott Összehasonlító segítségével.
statikus összehasonlító összehasonlítóDouble (ToDoubleFunction keyExtractor)Elfogad egy függvényt, amely kettős rendezési kulcsot von ki a T típusúból, és visszaad egy Comparatort, amely ezzel a rendezési kulccsal hasonlít össze.
statikus összehasonlító összehasonlítóInt (ToIntFunction keyExtractor)Elfogad egy függvényt, amely kivon egy int rendezési kulcsot a T típusúból, és egy Comparatort ad vissza, amely ezzel a rendezési kulccsal hasonlít össze.
statikus Comparator ComparingLong (ToLongFunction keyExtractor)Elfogad egy függvényt, amely kivon egy hosszú rendezési kulcsot a T típusúból, és visszaad egy Comparatort, amely ezzel a rendezési kulccsal hasonlít össze.
logikai egyenlő (Obj. objektum)Az aktuális objektum és a megadott objektum összehasonlítására szolgál.
statikusÖsszehasonlító naturalOrder()Egy összehasonlító eszközt ad vissza, amely az összehasonlítható objektumokat természetes sorrendben hasonlítja össze.
statikus Comparator nullsFirst (összehasonlító összehasonlító)Egy olyan összehasonlítót ad vissza, amely a nullát kisebbnek tekinti, mint a nem nulla elemeket.
statikus Comparator nullsLast(összehasonlító összehasonlító)Egy olyan összehasonlítót ad vissza, amely a nullát nagyobbnak tekinti, mint a nem nulla elemeket.
alapértelmezett Comparator fordított()Olyan összehasonlítót ad vissza, amely a megadott összehasonlító fordított sorrendjét tartalmazza.
statikusÖsszehasonlító reverseOrder()Olyan összehasonlítót ad vissza, amely a természetes sorrend fordítottját tartalmazza.
alapértelmezett Összehasonlító, majd Összehasonlítás (egyéb összehasonlító)Egy lexikográfiai sorrendű összehasonlítót ad vissza egy másik összehasonlítóval.
alapértelmezettÖsszehasonlító, majd összehasonlítás (Function keyExtractor)Egy lexikográfiai sorrend-összehasonlítót ad vissza, egy olyan függvénnyel, amely kivonja az Összehasonlítható rendezési kulcsot.
alapértelmezett Összehasonlító, majd Összehasonlítás (Function keyExtractor, Comparator keyComparator)Egy lexikográfiai sorrendű összehasonlítót ad vissza egy olyan funkcióval, amely kivon egy kulcsot az adott Összehasonlítóhoz képest.
alapértelmezett Comparator thenComparingDouble (ToDoubleFunction keyExtractor)Egy lexikográfiai sorrend-összehasonlítót ad vissza egy kettős rendezési kulcsot kivonó függvénysel.
alapértelmezett Comparator thenComparingInt(ToIntFunction keyExtractor)Egy lexikográfiai sorrend-összehasonlítót ad vissza egy int rendezési kulcsot kivonó függvénnyel.
alapértelmezett Comparator then ComparingLong (ToLongFunction keyExtractor)Egy lexikográfiai sorrend-összehasonlítót ad vissza egy hosszú rendezési kulcsot kivonó függvénnyel.

Java 8 összehasonlító példa

Lássuk a Lista elemeinek életkor és név szerinti rendezési példáját.

Fájl: 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; } } 

Fájl: 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 összehasonlító példa: nullsFirst() és nullsLast() metódus

Itt rendezzük a nullát is tartalmazó elemek listáját.

Fájl: 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; } } 

Fájl: 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