logo

Java Comparator sąsaja

Java Comparator sąsaja naudojamas vartotojo nustatytos klasės objektams sutvarkyti.

Ši sąsaja yra java.util pakete ir apima 2 palyginimo (Object obj1,Object obj2) ir equals (Object element) metodus.

Jame pateikiamos kelios rūšiavimo sekos, t. y. galite rūšiuoti elementus pagal bet kurį duomenų elementą, pavyzdžiui, rollno, vardą, amžių ar bet ką kitą.

Java palyginimo sąsajos metodai

Metodasapibūdinimas
viešas palyginimas (objektas obj1, objektas obj2)Jis lygina pirmąjį objektą su antruoju objektu.
vieša loginė vertė (Objekto objektas)Jis naudojamas dabartiniam objektui palyginti su nurodytu objektu.
vieša loginė vertė (Objekto objektas)Jis naudojamas dabartiniam objektui palyginti su nurodytu objektu.

Kolekcijos klasė

Kolekcijos klasėje pateikiami statiniai kolekcijos elementų rūšiavimo metodai. Jei rinkinio elementai yra Set arba Map, galime naudoti TreeSet arba TreeMap. Tačiau negalime rūšiuoti sąrašo elementų. Kolekcijos klasė taip pat pateikia metodus, kaip rūšiuoti sąrašo tipo elementus.

Sąrašo elementų rūšiavimo klasės rinkinių metodas

viešasis tuščias rūšiavimas (sąrašo sąrašas, palyginimo priemonė c): naudojamas sąrašo elementams rūšiuoti pagal nurodytą palyginiklį.


„Java“ palyginimo pavyzdys (nebendras senojo stiliaus)

Pažvelkime į Sąrašo elementų rūšiavimo pagal amžių ir vardą pavyzdį. Šiame pavyzdyje sukūrėme 4 Java klases:

  1. Studentas.java
  2. AgeComparator.java
  3. NameComparator.java
  4. Paprasta.java
Studentas.java

Šioje klasėje yra trys laukai rollno, vardas ir amžius bei parametrizuotas konstruktorius.

 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

Ši klasė apibrėžia palyginimo logiką pagal amžių. Jei pirmojo objekto amžius yra didesnis nei antrojo, mes grąžiname teigiamą reikšmę. Tai gali būti bet kas, pvz., 1, 2, 10. Jei pirmojo objekto amžius yra mažesnis nei antrojo objekto, mes grąžiname neigiamą reikšmę, tai gali būti bet kokia neigiama reikšmė, o jei abiejų objektų amžius yra lygus, mes grąžiname 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

Ši klasė pateikia palyginimo logiką, pagrįstą pavadinimu. Tokiu atveju mes naudojame palyginimo klasės metodą „CompletTo()“, kuris viduje pateikia palyginimo logiką.

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

Šioje klasėje objekto reikšmes spausdiname rūšiuodami pagal pavadinimą ir amžių.

 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“ palyginimo pavyzdys (bendras)

Studentas.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

Ši klasė pateikia palyginimo logiką, pagrįstą pavadinimu. Tokiu atveju mes naudojame palyginimo klasės metodą „CompletTo()“, kuris viduje pateikia palyginimo logiką.

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

Šioje klasėje objekto reikšmes spausdiname rūšiuodami pagal pavadinimą ir amžių.

 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 sąsaja

Java 8 Comparator sąsaja yra funkcinė sąsaja, kurioje yra tik vienas abstraktus metodas. Dabar galime naudoti palyginimo sąsają kaip lambda išraiškos arba metodo nuorodos priskyrimo tikslą.

Java 8 palyginimo sąsajos metodai

Metodasapibūdinimas
int palyginti (T o1, T o2)Jis lygina pirmąjį objektą su antruoju objektu.
statinisLyginamasis palyginimas (funkcijų klavišų ištraukiklis)Jis priima funkciją, kuri iš T tipo išskiria palyginamojo rūšiavimo raktą ir grąžina palyginimo priemonę, kuri lygina pagal tą rūšiavimo raktą.
statinis lygintuvo palyginimas (funkcijų klavišų ištraukėjas, palyginimo klavišų palyginimas)Jis priima funkciją, kuri išskiria rūšiavimo raktą iš T tipo, ir grąžina palyginiklį, kuris lygina pagal tą rūšiavimo raktą, naudodamas nurodytą palyginiklį.
statinis palyginimo įrankis, lyginamas „Double“ („ToDoubleFunction keyExtractor“)Ji priima funkciją, kuri išskiria dvigubą rūšiavimo raktą iš T tipo, ir grąžina palyginimo priemonę, kuri lygina pagal tą rūšiavimo raktą.
statinis lygintuvas comparingInt (ToIntFunction keyExtractor)Ji priima funkciją, kuri ištraukia int rūšiavimo raktą iš T tipo, ir grąžina palyginimo priemonę, kuri lygina pagal tą rūšiavimo raktą.
statinis lyginamasis ilgis (ToLongFunction keyExtractor)Ji priima funkciją, kuri išskiria ilgą rūšiavimo raktą iš T tipo, ir grąžina palyginimo priemonę, kuri lygina pagal tą rūšiavimo raktą.
loginis lygus (Objekto objektas)Jis naudojamas dabartiniam objektui palyginti su nurodytu objektu.
statinisPalyginimas naturalOrder()Jis pateikia lyginamąjį elementą, kuris lygina palyginamus objektus natūralia tvarka.
statinis lygintuvas nullsFirst (palyginimo priemonė)Jis grąžina lyginamąjį elementą, kuris nulinius elementus laiko mažesniais nei nenuliniais elementais.
statinis lygintuvas nullsLast (palyginimo priemonė)Jis grąžina lyginamąjį elementą, kuris nulinį elementą traktuoja kaip didesnį nei nenulinį elementą.
numatytasis lygintuvas atvirkščiai ()Jis grąžina lyginamąjį elementą, kuriame yra atvirkštinė pateikto lygintuvo tvarka.
statinisPalyginimo priemonė reverseOrder()Jis grąžina lyginamąjį elementą, kuriame yra atvirkštinė natūrali tvarka.
numatytasis lygintuvas, tada palyginimas (kitas palyginimas)Jis grąžina leksikografinės tvarkos lyginamąjį elementą su kitu lygintuvu.
numatytasPalyginimas, tada palyginimas (funkcijų klavišų ištraukiklis)Jis grąžina leksikografinės tvarkos lyginamąjį elementą su funkcija, kuri išskiria palyginamo rūšiavimo raktą.
numatytasis lygintuvas, tada palyginimas (funkcijų klavišų ištraukėjas, palyginimo klavišų palyginimas)Jis grąžina leksikografinės tvarkos lyginamąjį elementą su funkcija, kuri išskiria raktą, kuris bus lyginamas su nurodytu lygintuvu.
numatytasis lyginamasis įrankis, tada lyginamasis dubuo (ToDoubleFunction keyExtractor)Jis grąžina leksikografinės tvarkos lyginamąjį elementą su funkcija, kuri išskiria dvigubą rūšiavimo raktą.
numatytasis lygintuvas, tada ComparingInt (ToIntFunction keyExtractor)Jis grąžina leksikografinės tvarkos lyginamąjį elementą su funkcija, kuri išskiria int rūšiavimo raktą.
numatytasis lygintuvas, tada palyginimas ilgas (ToLongFunction keyExtractor)Jis grąžina leksikografinės tvarkos lyginamąjį elementą su funkcija, kuri išskiria ilgą rūšiavimo raktą.

Java 8 palyginimo pavyzdys

Pažvelkime į Sąrašo elementų rūšiavimo pagal amžių ir vardą pavyzdį.

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

Failas: 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 palyginimo pavyzdys: nullsFirst() ir nullsLast() metodas

Čia surūšiuojame elementų, kuriuose taip pat yra nulis, sąrašą.

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

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