4 Ekim 2016 Salı

Comparator Arayüzü

Giriş
İki nesneyi belirlediğimiz kritere göre kıyaslamak için kullanılır. Java 8 ile Comparator arayüzü yeni metodlara sahip oldu.

Max işlemi için kullanırız. Şöyle yaparız.
stream.max(Comparator.comparingInt(...).get()
Sort işlemi için kullanırız. Şöyle yaparız.
stream.sort(Comparator.comparing(...));
compare metodu
Açıklaması şöyle
Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.
İmzası şöyle
public int compare (Foo o1, Foo o2);
Şöyle yaparız. o1 diğer nesneden büyükse 1, diğer nesneye eşitse 0, küçükse -1 dönerim.
class FooComparator implements Comparator<Foo> {
  @Override
  public int compare (BankAccount o1, BankAccount o2) {
    return ...;
  }
}
Eğer sıralamada null daha küçük kabul etmek istersek şöyle yaparız.
public int compare (Foo o1, Foo o2) {
  if (o1 == o2) {
    return 0;
  }
  if (o1 == null) {
    return -1;
  }
  if (o2 == null) {
    return 1;
  }
  ...
  return ...;
}
comparingDouble metodu - static
Factory metodudur. Comparator nesnesi döner. Örnek ver

comparingInt metodu - static
Factory metodudur. Comparator nesnesi döner. min (), max (), sort (),  gibi işlemlerde kullanılabilir.

Eskiden şöyle yazardık.
List<String> al = Arrays.asList("45", "186", "185", "55", "51", "51", //
        "22", "78", "64", "26", "49", "21");
Collections.sort(al, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return Integer.compare(Integer.parseInt(o1), Integer.parseInt(o2));
    }
});
Max
Şimdi şöyle yazıyoruz.
someStrings.stream().max(Comparator.comparingInt(String::length)).get()
Sort
Şimdi şöyle yazıyoruz.
Collection.sort(al, Comparator.comparingInt(Integer::parseInt));
İki alan göre çalışan comparator şöyledir.
Collection.sort(personList, Comparator
    .comparingInt(Person::getAge)
    .thenComparing(Person::getSurname));
comparingLong metodu - static
Factory metodudur. Comparator nesnesi döner. Örnek ver

thenComparing metodu
İlk alan değerleri eşit ise ikinci alana göre sıralama yapmak için kullanılır. Şöyle yaparız.
Comparator.comparing(Drink::getName).
  thenComparing(Drink::getColour);
thenComparingDouble metodu
Örnek ver

thenComparingInt metodu
Örnek ver

thenComparingLong metodu
Örnek ver

Hiç yorum yok:

Yorum Gönder