logo

Java Karşılaştırıcı arayüzü

Java Karşılaştırıcı arayüzü Kullanıcı tanımlı bir sınıfın nesnelerini sıralamak için kullanılır.

Bu arayüz Java.util paketinde bulunur ve karşılaştırma(Object obj1,Object obj2) ve equals(Object element) olmak üzere 2 yöntem içerir.

Birden fazla sıralama dizisi sağlar; yani öğeleri herhangi bir veri üyesine (örneğin, kayıt numarası, ad, yaş veya başka herhangi bir şeye) göre sıralayabilirsiniz.

Java Karşılaştırıcı Arayüzü Yöntemleri

YöntemTanım
public int karşılaştırma(Object obj1, Object obj2)Birinci nesneyi ikinci nesneyle karşılaştırır.
genel boole eşittir (Object obj)Geçerli nesneyi belirtilen nesneyle karşılaştırmak için kullanılır.
genel boole eşittir (Object obj)Geçerli nesneyi belirtilen nesneyle karşılaştırmak için kullanılır.

Koleksiyonlar sınıfı

Koleksiyonlar sınıf, bir koleksiyonun öğelerini sıralamak için statik yöntemler sağlar. Koleksiyon elemanları Set veya Map ise TreeSet veya TreeMap'i kullanabiliriz. Ancak List'in elemanlarını sıralayamıyoruz. Koleksiyonlar sınıfı aynı zamanda Liste türü öğelerin öğelerini sıralamak için yöntemler sağlar.

Liste öğelerini sıralamak için Koleksiyon Yöntemi sınıfı

genel geçersiz sıralama (Liste listesi, Karşılaştırıcı c): Liste öğelerini verilen Karşılaştırıcıya göre sıralamak için kullanılır.


Java Karşılaştırıcı Örneği (Genel Olmayan Eski Stil)

List'in elemanlarını yaşa ve isme göre sıralama örneğini görelim. Bu örnekte 4 Java sınıfı oluşturduk:

  1. Öğrenci.java
  2. AgeComparator.java
  3. NameComparator.java
  4. Simple.java
Öğrenci.java

Bu sınıf, rollno, name ve age olmak üzere üç alan ve parametreli bir kurucu içerir.

 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

Bu sınıf yaşa göre karşılaştırma mantığını tanımlar. İlk nesnenin yaşı ikinciden büyükse pozitif bir değer döndürüyoruz. 1, 2, 10 gibi herhangi biri olabilir. Birinci nesnenin yaşı ikinci nesneden küçükse negatif bir değer döndürüyoruz, herhangi bir negatif değer olabilir ve her iki nesnenin yaşı eşitse, 0 değerini döndürüyoruz.

 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

Bu sınıf isme dayalı karşılaştırma mantığı sağlar. Böyle bir durumda, dahili olarak karşılaştırma mantığını sağlayan String sınıfının CompareTo() yöntemini kullanıyoruz.

 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

Bu sınıfta nesnenin değerlerini isim ve yaş bazında sıralayarak yazdırıyoruz.

 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 Karşılaştırıcı Örneği (Genel)

Öğrenci.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

Bu sınıf isme dayalı karşılaştırma mantığı sağlar. Böyle bir durumda, dahili olarak karşılaştırma mantığını sağlayan String sınıfının CompareTo() yöntemini kullanıyoruz.

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

Bu sınıfta nesnenin değerlerini isim ve yaş bazında sıralayarak yazdırıyoruz.

 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 Karşılaştırıcı arayüzü

Java 8 Karşılaştırıcı arayüzü, yalnızca bir soyut yöntem içeren işlevsel bir arayüzdür. Artık Karşılaştırıcı arayüzünü bir lambda ifadesi veya yöntem referansı için atama hedefi olarak kullanabiliriz.

Java 8 Karşılaştırıcı Arayüzü Yöntemleri

YöntemTanım
int karşılaştırma(T o1, T o2)Birinci nesneyi ikinci nesneyle karşılaştırır.
statikKarşılaştırıcı karşılaştırma (Fonksiyon tuşu Çıkarıcı)T türünden Karşılaştırılabilir sıralama anahtarını çıkaran ve bu sıralama anahtarına göre karşılaştırma yapan bir Karşılaştırıcı döndüren bir işlevi kabul eder.
Statik Karşılaştırıcı karşılaştırması (Function keyExtractor, Comparator keyComparator)T türünden bir sıralama anahtarı çıkaran bir işlevi kabul eder ve belirtilen Karşılaştırıcıyı kullanarak bu sıralama anahtarına göre karşılaştırma yapan bir Karşılaştırıcı döndürür.
Statik Karşılaştırıcı karşılaştırmaDouble(ToDoubleFunction keyExtractor)T türünden çift sıralama anahtarını çıkaran ve bu sıralama anahtarına göre karşılaştırma yapan bir Karşılaştırıcı döndüren bir işlevi kabul eder.
Statik Karşılaştırıcı karşılaştırmaInt(ToIntFunction keyExtractor)T türünden int sıralama anahtarını çıkaran ve bu sıralama anahtarına göre karşılaştırma yapan bir Karşılaştırıcı döndüren bir işlevi kabul eder.
Statik Karşılaştırıcı karşılaştırmaLong(ToLongFunction keyExtractor)T türünden uzun bir sıralama anahtarı çıkaran ve bu sıralama anahtarına göre karşılaştırma yapan bir Karşılaştırıcı döndüren bir işlevi kabul eder.
boole eşittir (Nesne nesnesi)Geçerli nesneyi belirtilen nesneyle karşılaştırmak için kullanılır.
statikKarşılaştırıcı naturalOrder()Karşılaştırılabilir nesneleri doğal sırayla karşılaştıran bir karşılaştırıcı döndürür.
Statik Karşılaştırıcı nullsFirst(Karşılaştırıcı karşılaştırıcı)Boş değeri boş olmayan öğelerden daha küçük olarak değerlendiren bir karşılaştırıcı döndürür.
Statik Karşılaştırıcı nullsLast(Karşılaştırıcı karşılaştırıcı)Boş değeri boş olmayan öğelerden daha büyük olarak değerlendiren bir karşılaştırıcı döndürür.
varsayılan Karşılaştırıcı ters()Sağlanan karşılaştırıcının ters sıralamasını içeren karşılaştırıcıyı döndürür.
statikKarşılaştırıcı tersOrder()Doğal sıralamanın tersini içeren karşılaştırıcıyı döndürür.
varsayılan Karşılaştırıcı ThenComparing(Karşılaştırıcı diğer)Başka bir karşılaştırıcıyla birlikte bir sözlüksel sıra karşılaştırıcısı döndürür.
varsayılanKarşılaştırıcı, ardından Karşılaştırma (Fonksiyon tuşu Çıkarıcı)Karşılaştırılabilir sıralama anahtarını çıkaran bir işleve sahip bir sözlüksel sıra karşılaştırıcısı döndürür.
varsayılan Karşılaştırıcı ThenComparing(Function keyExtractor, Comparator keyComparator)Verilen Karşılaştırıcıyla karşılaştırılacak bir anahtarı çıkaran bir işleve sahip bir sözlüksel sıra karşılaştırıcısı döndürür.
varsayılan Karşılaştırıcı ardındanComparingDouble(ToDoubleFunction keyExtractor)Çift sıralama anahtarını çıkaran bir işleve sahip bir sözlüksel sıra karşılaştırıcısı döndürür.
varsayılan Karşılaştırıcı ThenComparingInt(ToIntFunction keyExtractor)Bir int sıralama anahtarını çıkaran bir işleve sahip bir sözlüksel sıra karşılaştırıcısı döndürür.
varsayılan Karşılaştırıcı ardındanComparingLong(ToLongFunction keyExtractor)Uzun bir sıralama anahtarını çıkaran bir işleve sahip bir sözlüksel sıra karşılaştırıcısı döndürür.

Java 8 Karşılaştırıcı Örneği

List'in elemanlarını yaşa ve isme göre sıralama örneğini görelim.

Dosya: Öğrenci.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; } } 

Dosya: 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 Karşılaştırıcı Örneği: nullsFirst() ve nullsLast() yöntemi

Burada null içeren öğelerin listesini de sıralıyoruz.

Dosya: Öğrenci.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; } } 

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