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) }