Middle
Milyen operátorok vannak a Flow-ban?
sobes.tech MI
Válasz az MI-től
Íme a Flow főbb operátorai, kategóriák szerint csoportosítva:
Átalakítás:
map: Minden értékre alkalmaz egy átalakító függvényt.filter: Szűri azokat az értékeket, amelyek nem felelnek meg a predikátumnak.take: Csak az első N értéket veszi.drop: Elhagyja az első N értéket.transform: Egy rugalmasabb operátor a Flow-ról a másikra való átalakításhoz, nulla vagy több értéket kibocsátva minden bemeneti értékhez.
Kombinálás:
zip: Párokba rendezi két Flow értékeit.combine: Az utolsó értékeket kombinálja két Flow-ból.merge: Több Flow értékeit egyesíti egybe.
Simítás (Flattening):
flattenConcat: Flow-ból Flow-t egyesít, belső Flow-kat szekvenciálisan kezelve.flattenMerge: Flow-ból Flow-t egyesít, belső Flow-kat párhuzamosan kezelve (konkurencia korlátozással).
Kivételkezelés:
catch: Kivételt fog el, és végrehajt egy műveletet vagy egy vészértéket ad vissza.retry: Újrapróbálja a Flow-ot kivétel esetén.
Terminális operátorok:
collect: Minden értéket összegyűjt a Flow-ból.reduce: A Flow értékeit egyetlen értékké aggregálja.toList: A Flow-ot listává alakítja.first: Csak az első értéket veszi.single: Egyetlen értéket vesz (kivételt dob, ha több van).
Idő operátorok (gyakran a kotlinx.coroutines.flow.operators-ból):
debounce: Csak szünet után bocsát ki értéket.sample: Az utolsó értéket bocsátja ki időintervallumonként.throttle: Korlátozza az értékek kibocsátási sebességét.
map használatának példája:
flowOf(1, 2, 3)
.map { it * 2 } // 1, 2, 3-at 2, 4, 6-ra alakítja
.collect { println(it) }
filter használatának példája:
flowOf("apple", "banana", "cherry")
.filter { it.startsWith("b") } // Csak "banana" marad meg
.collect { println(it) }
zip használatának példája:
val numbers = flowOf(1, 2, 3)
val letters = flowOf("a", "b", "c")
numbers.zip(letters) { number, letter -> "$number$letter" } // "1a", "2b", "3c"-re kombinálva
.collect { println(it) }