Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpFwZr 196 of 299 menu
◀ ▶

Пара значений в потоке в Kotlin

Когда нужны именно синхронные пары - первый с первым, второй со вторым - подходит zip. Оператор ждет элемент с обеих сторон; как только пара готова, вызывается функция объединения. Более длинный хвост отбрасывается.

Два коротких потока дают ровно столько пар, сколько элементов у более короткого:

import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.zip import kotlinx.coroutines.runBlocking fun main() { runBlocking { val keys = flowOf("k1", "k2", "k3") val vals = flowOf(10, 20) keys.zip(vals) { k, v -> "$k=$v" } .collect { line -> println(line) } } }

Печатаются "k1=10" и "k2=20". Третий ключ не получает партнера - zip уже завершился.

Пары можно собирать в структуры или кортежи без промежуточных строк:

import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.zip import kotlinx.coroutines.runBlocking fun main() { runBlocking { flowOf(1, 2, 3) .zip(flowOf("a", "b", "c")) { n, ch -> n to ch } .collect { duo -> println(duo) } } }

Три пары (1, a), (2, b), (3, c) идут строго по индексу. Функция zip не пересчитывает старые пары при новых значениях - в отличие от combine.

Потоки "one", "two" и 1, 2, 3 свяжите через zip в строки вида "one:1". Выведите все получившиеся строки.

Буквы "A", "B" и цифры 9, 8, 7, 6 объедините попарно и напечатайте каждую пару как два символа через запятую.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить