CodeBlanks Logo Icon CodeBlanks

Comparator ile lambda

Comparator.comparing ile sıralamayı öğrenirsin.

Comparator ile lambda

Bir listeyi sıralamanın modern yolu sort'a bir Comparator lambda vermektir. names.sort((a, b) -> a.length() - b.length()); isme göre uzunluk sıralar. Comparator iki parametre alır; negatif, sıfır ya da pozitif döndürür.

Artan sıra için a - b, azalan için b - a yazılır. Daha okunaklı bir yol: Comparator.comparingInt(String::length). Bu, method reference ile bir alanı sıralama anahtarı yapar. Tersine çevirmek için .reversed() kullanılır.

Comparator.comparingInt

Comparator.comparingInt(String::length) bir alanı sıralama anahtarı yapar. Method reference String::length anahtar üreten fonksiyondur. Bu yöntem, (a, b) -> a.length() - b.length() lambdasından daha okunaklıdır.

Birden fazla anahtarla sıralama için .thenComparing kullanılır. Örneğin önce uzunluk sonra alfabe: Comparator.comparingInt(String::length).thenComparing(s -> s). Ters sıra için .reversed() tüm karşılaştırmayı tersine çevirir.

Uygulama İsimleri uzunluğa göre sırala

List<String> names = new ArrayList<>(); tanımla; "Mehmet", "Ayşe", "Alex" ekle. names.sort((a, b) -> a.length() - b.length()); ile uzunluğa göre artan sırala. names.forEach(System.out::println); ile sonucu yazdır.

Başlangıç kodu

Main.java
import java.util.List;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        // List<String> tanimla, 3 isim ekle, uzunluga gore sirala, forEach ile yazdir

    }
}

Örnek çözüm

Main.java
import java.util.List;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("Mehmet");
        names.add("Ayşe");
        names.add("Alex");
        names.sort((a, b) -> a.length() - b.length());
        names.forEach(System.out::println);
    }
}

Beklenen çıktı

Ayşe
Alex
Mehmet

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Uzunluk Comparator'u tamamla

Soru
names.sort((a, b) -> a.____() - b.length());
Cevap
names.sort((a, b) -> a.length() - b.length());

Açıklama: length metodu String'in uzunluğunu verir.

2 Comparator lambda parçalarını eşleştir

Kavram Anlamı
(a, b) İki parametre
-> Ok işareti
a.length() - b.length() Artan sıra
b.length() - a.length() Azalan sıra

3 (a, b) -> a - b ne sıralaması yapar?

  • Azalan
  • Artan Doğru cevap
  • Rastgele
  • Karışık

Açıklama: a - b artan sıralar; küçük değer önce gelir.

Orta seviye bölümündeki tüm dersler