5 Mayıs 2020 Salı

Ordering Sınıfı

Giriş
Bu sınıf yerine Java 8 ile gelen Comparator rahatlıkla kullanılabilir.

allEqual metodu
Tüm elemanlar eşit kabul eder.
Örnek
Şöyle yaparız. Tüm elemanları eşit kabul ettiği için true döner.
ArrayList<Integer> arrayList = Arrays.asList(1,3,2);
assertTrue(Ordering.allEqual().reverse().isOrdered(arrayList));
explicit metodu
onResultOf() çağrısının döndürdüğü sonucun, belirtilen listedeki indeksini döndürür.
Örnek
getStatus() sonucu 1 olanlar ilk, 0 olanlar ikinci, 5 olanlar üçüncü sırada olsun istersek şöyle yaparız.
users.sort(Ordering
        .explicit(1, 0, 5)
        .onResultOf(User::getStatus)
        .thenComparing(User::getUsername));
Örnek
Şöyle yaparız. onResultOf() eğer string listede yoksa "OTHERS" döndürür. Onun da konumu 0'dır.
List<String> currencies = ImmutableList.of("OTHERS", "PLN","EUR","USD","GBP", "CHF");
Ordering<String> currencyOrdering = Ordering.explicit(currencies)
.onResultOf(lang -> currencies.contains(lang) ? lang : "OTHERS"); System.out.println(currencyOrdering.compare("JPY", "PLN")); // -1 System.out.println(currencyOrdering.compare("JPY", "TTT")); // 0 System.out.println(currencyOrdering.compare("CHF", "GBP")); // 1
Aslında bu kadar karmaşık yapmak yerine sadece Java kullanarak şöyle yaparız
List<String> currencies = List.of("PLN","EUR","USD","GBP", "CHF");
Comparator<Object> objectComparator = Comparator.comparingInt(currencies::indexOf);
System.out.println(objectComparator.compare("JPY", "PLN")); //-1
System.out.println(objectComparator.compare("JPY", "TTT")); //0
System.out.println(objectComparator.compare("CHF", "GBP")); //1
isOrdered metodu - Iterable
Örnek
Elimizde bir Comparator olsun.
public Comparator<String> getComparator() {
  return new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
      ...
    }
  };
}
Şöyle yaparız
public boolean isOrdered(List<String> list) {
  return Ordering.from(getComparator()).isOrdered(list);
}
natural metodu
Şöyle yaparız. Normal compare() metodu çağrılır. Daha sonra sıralanmış listeden en küçük elemen seçilir.
return Ordering.natural().nullsLast().min(discontinueDate, actualTerminateDate);
sortedCopy metodu
Collections.sort() metodu girdi nesneyi değiştirir. Farklı bir kopya almak için şöyle yaparız.
List<string> sorted = Ordering.natural().sortedCopy(strings);

Hiç yorum yok:

Yorum Gönder