Объедините множество потоков Kotlin, чтобы получить только их текущее значение

#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() к объединенному потоку, зависит от вас. Я не думаю, что в любом случае это чище.