Sobes.tech
Middle

Flowda qanday operatorlar mavjud?

sobes.tech AI

AIdan javob

Mana asosiy Flow operatorlari, kategoriyalarga bo'lingan:

Transformatsiya:

  • map: Har bir qiymatga transformatsiya funksiyasini qo'llaydi.
  • filter: Predikatga mos kelmaydigan qiymatlarni filtrlaydi.
  • take: Faqat birinchi N qiymatni oladi.
  • drop: Birinchi N qiymatni o'tkazib yuboradi.
  • transform: Bir Flow'dan boshqasiga o'tish uchun yanada moslashuvchan operator, har bir kirish qiymati uchun nol yoki undan ko'p qiymatlarni chiqaradi.

Kombinatsiya:

  • zip: Ikki Flow qiymatlarini juftlik bilan birlashtiradi.
  • combine: Ikki Flow ning oxirgi qiymatlarini birlashtiradi.
  • merge: Bir nechta Flow qiymatlarini bitta qilib birlashtiradi.

Yumshatish (Flattening):

  • flattenConcat: Flow'dan Flow'ga, ichki Flow'larni ketma-ket ishlov berish.
  • flattenMerge: Flow'dan Flow'ga, ichki Flow'larni parallel ishlov berish (konkurentlik cheklov bilan).

Xatoliklarni boshqarish:

  • catch: Xatoliklarni ushlaydi va harakat qiladi yoki favqulodda qiymatni qaytaradi.
  • retry: Xatolik yuz berganda Flow'ni takrorlaydi.

Terminal operatorlar:

  • collect: Barcha qiymatlarni yig'adi.
  • reduce: Flow qiymatlarini bitta qiymatga yig'adi.
  • toList: Flow'ni ro'yxatga aylantiradi.
  • first: Faqat birinchi qiymatni oladi.
  • single: Yagona qiymatni oladi (agar qiymatlar ko'proq bo'lsa, xato chiqaradi).

Vaqt operatorlari (ko'pincha kotlinx.coroutines.flow.operators dan):

  • debounce: Faqat uzilishdan keyin qiymatni chiqaradi.
  • sample: Vaqt oralig'ida oxirgi qiymatni chiqaradi.
  • throttle: Qiymatlarning chiqarilish tezligini cheklaydi.

map dan foydalanish misoli:

flowOf(1, 2, 3)
    .map { it * 2 } // 1, 2, 3 ni 2, 4, 6 ga o'zgartiradi
    .collect { println(it) }

filter dan foydalanish misoli:

flowOf("apple", "banana", "cherry")
    .filter { it.startsWith("b") } // Faqat "banana" qoldiradi
    .collect { println(it) }

zip dan foydalanish misoli:

val numbers = flowOf(1, 2, 3)
val letters = flowOf("a", "b", "c")
numbers.zip(letters) { number, letter -> "$number$letter" } // "1a", "2b", "3c" ga birlashtiradi
    .collect { println(it) }