CodeBlanks Logo Icon CodeBlanks

flatMap

flatMap ile iç içe akışları düzleştirmeyi öğrenirsin.

Akışı düzleştirme: flatMap

map her elemanı birebir yeni bir değere çevirir. flatMap ise her elemanı birden çok elemanlı bir akışa çevirir ve bu akışları tek bir akışta birleştirir. İç içe listeleri düzleştirmek için kullanılır.

Örnek: lists.stream().flatMap(List::stream). Burada her iç liste bir akışa çevrilir, sonra bu akışlar tek bir akış olarak birleştirilir. Sonuç Stream<Integer> olur; tüm iç listelerin elemanlarını sırayla içerir.

flatMap ile yaygın desenler

flatMap'in en sık kullanıldığı iki durum vardır: iç içe koleksiyonları düzleştirmek ve bir nesneden birden çok değer üretmek.

Örnek: bir Order nesnesinin items listesi varsa, orders.stream().flatMap(o -> o.items().stream()) tüm siparişlerin tüm kalemlerini tek bir akışta verir. Başka bir örnek: bir dizgiyi karakter akışına açmak için str.chars().mapToObj(c -> (char) c) kullanılır; bu da bire-çok bir dönüşümdür.

Uygulama İç içe listeleri düzleştir

Üç iç listeden oluşan bir List<List<Integer>> oluştur: List.of(1, 2, 3), List.of(4, 5), List.of(6). Akışı flatMap(List::stream) ile düzleştir, toList ile topla. Sonra her elemanı ayrı satırda System.out::println ile yazdır.

Başlangıç kodu

Main.java
import java.util.List;

// İç içe listeleri düzleştir
// flatMap ile her iç listeyi akışa aç
// Her elemanı ayrı satırda yazdır

Örnek çözüm

Main.java
import java.util.List;

public class FlattenLists {
    public static void main(String[] args) {
        List<List<Integer>> nested = List.of(
            List.of(1, 2, 3),
            List.of(4, 5),
            List.of(6)
        );
        List<Integer> flat = nested.stream()
            .flatMap(List::stream)
            .toList();
        flat.forEach(System.out::println);
    }
}

Beklenen çıktı

1
2
3
4
5
6

Soru ve cevaplar

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

1 map ve flatMap farkını eşleştir

Kavram Anlamı
map Birebir dönüşüm
flatMap Bire-çok dönüşüm
List::stream İç listeyi akışa açar
Stream.of Akış oluşturur

2 İç içe listeleri tek bir akışta birleştirmek için hangi yöntem kullanılır?

  • flatMap Doğru cevap
  • map
  • filter
  • reduce

Açıklama: FlatMap. İç içe akışları düzleştirir.

3 flatMap çağrısını tamamla

Soru
List<Integer> flat = nested.stream()
    .flatMap(____)
    .toList();
Cevap
List<Integer> flat = nested.stream()
    .flatMap(List::stream)
    .toList();

Açıklama: List::stream her iç listeyi akışa açar.

İleri seviye bölümündeki tüm dersler