Comparator Nedir? Nasıl Kullanılır?

Sıklıkla standart sıralama yaklaşımından farklı bir biçimde sıralama yapmak istenebilir. Örneğin String’leri alfabetik olarak değil de uzunluklarına göre sıralanmak istenebilir. Bunun için jenerik özellikteki
Comparator arayüzü kullanan bir sınıf ve bu sınıfa ait bir nesne tanımlanabilir.

Comparator arayüzünü uygulayan sınıfta bizden compare metodunu örtmemiz (overrride) istenecektir. Bu metotta; sıralamada, iki veri tipini kıyaslamada kullanacağımız kıstası kendimiz tanımlayacağız.

Sıralamada iki parametreden;sonra gelmesini istediğimiz kıyaslamada 1 değerini, önce gelmesini istediğimiz kıyaslamada -1 değerini, eşit kabul ettiğimiz kıyaslamada 0 değerini döndürmeliyiz.

Örneğin yukarıda tanımlanan sınıfta String’leruzunluğuna göre kısadan uzunluğa doğru sıralayacaktır.

Bir önceki Collections Sort Metodu Kullanımı yazısında Collections.sort() metodunu kullanırken parantez içerisinde bizden List arayüzünü uygulayan bir sınıfa ait bir nesne bekleniyordu. ArrayList sınıfı da List arayüzünü uygulayan bir sınıftır. Biz de bu sınıftan (Integer, String vb. saklayan ) bir nesneyi (liste) parametre olarak vermiştik ve standart sıralamalar yapmıştık(sayılarda küçükten büyüğe; String’lerde alfabetik)

Şimdi ise Collections.sort() metodunun aşırı yüklenmiş(overloaded) versiyonunu kullanacağız. Bu versiyonda bizden iki parametre beklenmekte.

İlk parametre tipimiz aynı, ancak ikinci parametre olarak Comparator arayüzünü uygulayan bir sınıftan nesne beklenmektedir. Biz de tanımladığımız StringKarsilastirici sınıfından bir nesne oluşturup metoda ikinci parametre olarak geçmekteyiz.

Kullanacağımız karşılaştırıcı nesnesini sadece bir kez kullanacaksak bunu anonim sınıf olarak da tanımlayabiliriz.

Önceki örneğin aşağıdaki versiyonunda, jenerik Comparator arayüzünü uygulayan bir sınıfı (ayrıca bir isim vermeden, yani anonim olarak), bizden parametre beklenen yerde tanımlıyor ve aynı zamanda bu sınıftan bir nesneyi oluşturuyoruz.

Bir başka örneğe bakalım. Bu örnekte bizden bir ArrayList nesnesi içindeki sayıları büyükten küçüğe doğru sıralamamız isteniyor.

Bunun için önceki örnekteki gibi Comparator arayüzünü uygulayan bir sınıf tanımlarız. Bu kez Comparator yazdıktan sonra gelecek <> ifadesinde jenerik olarak Integer yer alacaktır.

Birinci parametre olarak list1 adındaki ArrayList nesnesi ve ikinci parametre olarak tanımladığımız sınıfa ait bir karşılaştırıcı nesnesi ile Collections.sort() metodunu çağırabiliriz.

Sonuçta listemiz, karşılaştırıcımızın ait olduğu sınıfta, metot örtme (override) işlemi uyguladığımız compare metoduna göre büyükten küçüğe doğru sıralamaktadır.

Not : Comparable (karşılaştırılabilir) arayüzünü öğrenmeniz Comparator (karşılaştırıcı) arayüzü konusunu pekiştirmenizde fayda sağlayacaktır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir