Sobes.tech
Middle

Flow-də hansı operatorlar mövcuddur?

sobes.tech Süni İntellekt

AI-dan cavab

Budur Flow-un əsas operatorları, kateqoriyalara görə qruplaşdırılmışdır:

Transformasiya:

  • map: Hər bir dəyərə transformasiya funksiyası tətbiq edir.
  • filter: Predikatla uyğun olmayan dəyərləri filtr edir.
  • take: Yalnız ilk N dəyəri götürür.
  • drop: İlk N dəyəri atır.
  • transform: Bir Flow-dan digərinə çevirmək üçün daha çevik operator, hər giriş dəyəri üçün sıfır və ya daha çox dəyər yayır.

Birleştirmə:

  • zip: İki Flow-un dəyərlərini cütlər şəklində birləşdirir.
  • combine: İki Flow-un son dəyərlərini birləşdirir.
  • merge: Bir neçə Flow-un dəyərlərini birləşdirir.

Yumşaltma (Flattening):

  • flattenConcat: Flow-dan Flow-a, daxili Flow-ları ardıcıl işləyir.
  • flattenMerge: Flow-dan Flow-a, daxili Flow-ları paralel işləyir (konkurrentlik məhdudiyyəti ilə).

İstisna idarəetməsi:

  • catch: İstisnaları tutar və hərəkət edir və ya fövqəladə dəyər qaytarır.
  • retry: İstisna baş verdikdə Flow-u yenidən cəhd edir.

Terminal operatorlar:

  • collect: Bütün dəyərləri toplayır.
  • reduce: Flow dəyərlərini birinə toplar.
  • toList: Flow-u siyahıya çevirir.
  • first: Yalnız ilk dəyəri götürür.
  • single: Yeganə dəyəri götürür (əks halda istisna atır).

Zaman operatorları (tez-tez kotlinx.coroutines.flow.operators-dən):

  • debounce: Yayımdan sonra yalnız fasilə zamanı dəyər yayır.
  • sample: Zaman intervalında son dəyəri yayır.
  • throttle: Dəyərlərin yayılma sürətini məhdudlaşdırır.

map istifadə nümunəsi:

flowOf(1, 2, 3)
    .map { it * 2 } // 1, 2, 3-ü 2, 4, 6-ya çevirir
    .collect { println(it) }

filter istifadə nümunəsi:

flowOf("apple", "banana", "cherry")
    .filter { it.startsWith("b") } // Yalnız "banana" saxlayır
    .collect { println(it) }

zip istifadə nümunəsi:

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