Sobes.tech
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) }