CodeBlanks Logo Icon CodeBlanks

map ve filter

map ve filter ile Flow dönüştürme öğrenirsin.

map ve filter: Ara operatörler

map her değeri dönüştürür; filter koşulu sağlayan değerleri geçirir. İkisi de ara (intermediate) operatördür: yeni bir Flow döndürür, akışı çalıştırmaz. Akış yalnızca terminal (collect) çağrılınca çalışır.

numbers()
    .filter { it % 2 == 0 }
    .map { it * 10 }
    .collect { println(it) }

Burada 1..5 değerlerinden çift olanlar (2, 4) seçilir, 10 ile çarpılır (20, 40) ve yazdırılır. Operatörler zincirlenir; her biri bir önceki akışı tüketip yeni akış üretir.

Operatör zinciri

Ara operatörler zincirlenir; her biri bir akış alır, yeni akış üretir. filter ve map sırasıyla çalışır: önce filtreleme, sonra dönüştürme. Terminal çağrılınca tüm zincir yukarıdan aşağı çalışır.

flowOf(1, 2, 3, 4, 5)
    .filter { it > 2 }
    .map { it * it }
    .collect { println(it) }

Çıktı: 9, 16, 25 (3², 4², 5²). Önce 3, 4, 5 filtrelenir, sonra her birinin karesi alınır. Zincir sırası çıktıyı doğrudan etkiler.

Uygulama filter ve map zinciri kur

fun numbers(): Flow<Int> = flowOf(1, 2, 3, 4, 5) tanımla. main'i runBlocking ile işaretle. İçinde numbers().filter { it % 2 == 0 }.map { it * 10 }.collect { println(it) } çağrısı yapsın. Çıktı her sonucu ayrı satırda yazdırır.

Başlangıç kodu

Main.kt
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.runBlocking

// numbers fonksiyonu: 1, 2, 3, 4, 5 değerleriyle Flow<Int> döndürsün
// main: çift sayıları süz, 10 ile çarp, her birini yazdır
fun main() = runBlocking {
    // buraya yaz
}

Örnek çözüm

Main.kt
fun numbers(): Flow<Int> = flowOf(1, 2, 3, 4, 5)

fun main() = runBlocking {
    numbers().filter { it % 2 == 0 }.map { it * 10 }.collect { println(it) }
}

Beklenen çıktı

20
40

Soru ve cevaplar

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

1 Operatörleri eşle

Kavram Anlamı
map { } Dönüştürür
filter { } Süzer
intermediate Ara işlem
collect { } Terminal

2 Değer dönüştürme

Soru
val doubled = numbers().____ { it * 2 }
Cevap
val doubled = numbers().map { it * 2 }

Açıklama: map her değeri dönüştürür.

3 flow.filter { it % 2 == 0 } ne yapar?

  • Tüm değerleri 2'ye böler
  • Yalnızca çift değerleri geçirir Doğru cevap
  • Her değeri çift sayıya çevirir
  • Değerleri 0'a eşitler

Açıklama: filter, koşulu sağlayan değerleri geçirir; diğerlerini bırakır.

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