Sobes.tech
Middle

Flow-ში რა ოპერატორები არსებობს?

sobes.tech AI

პასუხი AI-სგან

აქ არის ძირითადი Flow ოპერატორები, დაჯგუფებული კატეგორიებად:

გადამუშავება:

  • map: ახდენს ტრანსფორმაციის ფუნქციის გამოყენებას თითოეულ მნიშვნელობაზე.
  • filter: ფილტრავს მნიშვნელობებს, რომლებიც არ პასუხობენ წინასწარ განსაზღვრულ პირობას.
  • take: იღებს მხოლოდ პირველ N მნიშვნელობას.
  • drop: გამოტოვებს პირველ N მნიშვნელობას.
  • transform: უფრო მოქნილი ოპერატორია, რომელიც გარდაქმნის ერთ Flow-დან მეორე Flow-ად, გამოყოფს ერთზე ან მეტ მნიშვნელობას თითოეულ შემოსავალ მნიშვნელობაზე.

კომბინაცია:

  • zip: პაექრობით აერთიანებს ორი Flow-ის მნიშვნელობებს.
  • combine: აერთიანებს ორი Flow-ის ბოლო მნიშვნელობებს.
  • merge: აერთიანებს რამდენიმე Flow-ის მნიშვნელობებს ერთში.

გლუვადება (Flattening):

  • flattenConcat: აერთიანებს Flow-დან Flow-ს, თანმიმდევრულად მუშაობს შიდა Flow-ებზე.
  • flattenMerge: აერთიანებს Flow-დან Flow-ს, პარალელურად მუშაობს შიდა Flow-ებზე (კონკურენციის შეზღუდვით).

გამონაკლისების დამუშავება:

  • catch: იჭერს გამონაკლისებს და ახორციელებს მოქმედებას ან აბრუნებს შეცდომის მნიშვნელობას.
  • retry: ცდილობს ისევ და ისევ Flow-ის გაშვებას გამონაკლისის შემთხვევაში.

ტერმინალური ოპერატორები:

  • collect: აგროვებს ყველა მნიშვნელობას Flow-დან.
  • reduce: აგროვებს მნიშვნელობებს ერთში.
  • toList: გარდაქმნის Flow-ს სიად.
  • first: იღებს მხოლოდ პირველ მნიშვნელობას.
  • single: იღებს ერთმნიშვნელოვან მნიშვნელობას (გამოდის გამონაკლისი, თუ მეტი მნიშვნელობაა).

დროის ოპერატორები (ხშირად kotlinx.coroutines.flow.operators-დან):

  • debounce: გამოყოფს მნიშვნელობას მხოლოდ პაუზის შემდეგ.
  • sample: გამოყოფს ბოლო მნიშვნელობას დროის ინტერვალით.
  • throttle: შეზღუდავს მნიშვნელობების გაშვების სიჩქარეს.

map გამოყენების მაგალითი:

flowOf(1, 2, 3)
    .map { it * 2 } // გარდაქმნის 1, 2, 3-ებს 2, 4, 6-ად
    .collect { println(it) }

filter გამოყენების მაგალითი:

flowOf("apple", "banana", "cherry")
    .filter { it.startsWith("b") } // მხოლოდ "banana" რჩება
    .collect { println(it) }

zip გამოყენების მაგალითი:

val numbers = flowOf(1, 2, 3)
val letters = flowOf("a", "b", "c")
numbers.zip(letters) { number, letter -> "$number$letter" } // აერთიანებს "1a", "2b", "3c"
    .collect { println(it) }