logo

Java Comparator-interface

Java Comparator-interface wordt gebruikt om de objecten van een door de gebruiker gedefinieerde klasse te ordenen.

Deze interface is te vinden in het java.util-pakket en bevat twee methoden: Compare (Object obj1, Object obj2) en equals (Object-element).

Het biedt meerdere sorteerreeksen, dat wil zeggen dat u de elementen kunt sorteren op basis van elk gegevenslid, bijvoorbeeld rolnummer, naam, leeftijd of iets anders.

Methoden van de Java-vergelijkingsinterface

MethodeBeschrijving
public int Compare(Object obj1, Object obj2)Het vergelijkt het eerste object met het tweede object.
public boolean is gelijk aan (Object obj)Het wordt gebruikt om het huidige object te vergelijken met het opgegeven object.
public boolean is gelijk aan (Object obj)Het wordt gebruikt om het huidige object te vergelijken met het opgegeven object.

Collecties klasse

Collecties class biedt statische methoden voor het sorteren van de elementen van een verzameling. Als collectie-elementen Set of Map zijn, kunnen we TreeSet of TreeMap gebruiken. We kunnen de elementen van Lijst echter niet sorteren. De klasse Collections biedt ook methoden voor het sorteren van de elementen van elementen van het type Lijst.

Method of Collections-klasse voor het sorteren van lijstelementen

public void sort (Lijstlijst, Comparator c): wordt gebruikt om de elementen van Lijst te sorteren op de gegeven Comparator.


Java-vergelijkingsvoorbeeld (niet-generieke oude stijl)

Laten we eens kijken naar het voorbeeld van het sorteren van de elementen van Lijst op basis van leeftijd en naam. In dit voorbeeld hebben we 4 Java-klassen gemaakt:

  1. Student.java
  2. AgeComparator.java
  3. NaamComparator.java
  4. Simpel.java
Student.java

Deze klasse bevat drie velden rollno, naam en leeftijd en een geparametriseerde constructor.

 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

Deze klasse definieert vergelijkingslogica op basis van de leeftijd. Als de leeftijd van het eerste object groter is dan het tweede, retourneren we een positieve waarde. Het kan iedereen zijn, zoals 1, 2, 10. Als de leeftijd van het eerste object kleiner is dan die van het tweede object, retourneren we een negatieve waarde. Dit kan elke negatieve waarde zijn, en als de leeftijd van beide objecten gelijk is, wij geven 0 terug.

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

Deze klasse biedt vergelijkingslogica op basis van de naam. In dat geval gebruiken we de methode CompareTo() van de klasse String, die intern de vergelijkingslogica levert.

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

In deze klasse drukken we de waarden van het object af door te sorteren op basis van naam en leeftijd.

 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 

Voorbeeld van Java-vergelijker (algemeen)

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

Deze klasse biedt vergelijkingslogica op basis van de naam. In dat geval gebruiken we de methode CompareTo() van de klasse String, die intern de vergelijkingslogica levert.

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

In deze klasse drukken we de waarden van het object af door te sorteren op basis van naam en leeftijd.

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

Java 8 Comparator-interface is een functionele interface die slechts één abstracte methode bevat. Nu kunnen we de Comparator-interface gebruiken als toewijzingsdoel voor een lambda-expressie of methodereferentie.

Methoden van Java 8-vergelijkingsinterface

MethodeBeschrijving
int vergelijken(T o1, T o2)Het vergelijkt het eerste object met het tweede object.
statischComparator vergelijken (Functie keyExtractor)Het accepteert een functie die een vergelijkbare sorteersleutel uit een type T haalt, en retourneert een comparator die vergelijkt met die sorteersleutel.
statisch Comparator vergelijken (Functie keyExtractor, Comparator keyComparator)Het accepteert een functie die een sorteersleutel uit een type T haalt, en retourneert een Comparator die vergelijkt met die sorteersleutel met behulp van de opgegeven Comparator.
statische comparator vergelijkenDouble(ToDoubleFunction keyExtractor)Het accepteert een functie die een dubbele sorteersleutel uit een type T haalt, en retourneert een Comparator die vergelijkt met die sorteersleutel.
statische comparator CompareInt(ToIntFunction keyExtractor)Het accepteert een functie die een int-sorteersleutel uit een type T haalt, en retourneert een Comparator die vergelijkt met die sorteersleutel.
statische comparator vergelijkenLong(ToLongFunction keyExtractor)Het accepteert een functie die een lange sorteersleutel uit een type T haalt, en retourneert een Comparator die vergelijkt met die sorteersleutel.
Booleaanse waarde is gelijk aan(Object obj)Het wordt gebruikt om het huidige object te vergelijken met het opgegeven object.
statischVergelijker naturalOrder()Het retourneert een comparator die vergelijkbare objecten in natuurlijke volgorde vergelijkt.
statische Comparator nullsFirst(Comparator-comparator)Het retourneert een comparator die null als minder dan niet-null-elementen beschouwt.
statische Comparator nullsLast(Comparator-comparator)Het retourneert een comparator die nul als groter beschouwt dan niet-nul-elementen.
standaardvergelijker omgekeerd()Het retourneert een comparator die de omgekeerde volgorde van de opgegeven comparator bevat.
statischVergelijker reverseOrder()Het retourneert een comparator die het omgekeerde van de natuurlijke ordening bevat.
standaardvergelijker thenComparing(vergelijker anders)Het retourneert een comparator van de lexicografische volgorde met een andere comparator.
standaardComparator en vervolgensVergelijken (FunctietoetsExtractor)Het retourneert een comparator van de lexicografische volgorde met een functie die een vergelijkbare sorteersleutel extraheert.
standaard Comparator thenComparing (FunctietoetsExtractor, Comparator-toetsComparator)Het retourneert een comparator van lexicografische volgorde met een functie die een sleutel extraheert om te vergelijken met de gegeven comparator.
standaard Comparator thenComparingDouble(ToDoubleFunction keyExtractor)Het retourneert een vergelijker van de lexicografische volgorde met een functie die een dubbele sorteersleutel extraheert.
standaard Comparator thenComparingInt(ToIntFunction keyExtractor)Het retourneert een vergelijker van de lexicografische volgorde met een functie die een int-sorteersleutel extraheert.
standaard Comparator thenComparingLong(ToLongFunction keyExtractor)Het retourneert een vergelijker van de lexicografische volgorde met een functie die een lange sorteersleutel extraheert.

Java 8-vergelijkingsvoorbeeld

Laten we eens kijken naar het voorbeeld van het sorteren van de elementen van Lijst op basis van leeftijd en naam.

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

Bestand: 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 Voorbeeld: nullsFirst() en nullsLast() methode

Hier sorteren we de lijst met elementen die ook null bevatten.

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

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