map ve filter
- Kotlin kursu
- Orta seviye
- Ders 91/116
- 5 dk
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
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
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
val doubled = numbers().____ { it * 2 }
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.