#android #kotlin #kotlin-flow
#Android #котлин #котлин-поток
Вопрос:
Я использую API-интерфейсы предпочтений, которые возвращают потоки. Бывают случаи, когда мне нужно объединить значения из разных предпочтений. Я знаю, что могу использовать flow.combine
.
Поскольку метод, в котором мне нужно объединить, является suspend
функцией, а значение из потоков больше никуда не нужно передавать, я также мог бы определить что-то вроде этого:
suspend fun lt;Tgt; Flowlt;Tgt;.currentValue(): T { var res: T? = null this.collect { res = it } return res!! }
а затем просто считывайте по одному значению за раз:
val val1 = flow1.currentValue() val val2 = flow2.currentValue() val val3 = flow3.currentValue()
Есть ли лучший способ сделать это? Или я должен просто использовать этот combine
метод?
Ответ №1:
Вам не нужно определять currentValue
функцию. Уже существует Flow.first()
функция, которая возвращает первое значение потока. Поскольку эти потоки предназначены для того, чтобы всегда выдавать начальное значение с текущим значением предпочтения, это будет работать нормально.
Обратите внимание, что ваша currentValue()
функция никогда не вернется, потому collect
что не вернется, пока поток не будет завершен.
Хотите ли вы по отдельности обращаться first()
к каждому Потоку или combine
ко всем из них и обращаться first()
к объединенному потоку, зависит от вас. Я не думаю, что в любом случае это чище.