RxJava2 |Как обработать группу Maybes - PullRequest
0 голосов
/ 26 октября 2018

Я рефакторинг кода для использования RoomDataBase и RxJava2.У меня есть DataSource, который выбирает строку по id и возвращает Maybe

 override fun getByAppWidgetId(appWidgetId: Int): Maybe<LocationWidget> {
    return mDB.locationDao().getByAppWidgetId(appWidgetId)
}

. В другом месте я получаю массив из appWidgetId s, для которого я хочу получить записи строки для каждого из идентификаторов.Я хочу объединить все Maybes в один Observable и

private fun hasCurrentLocationWidget(appWidgetIds: IntArray): Single<Boolean> {
  observableOfMaybes: Observable // something to hold the maybes we're about to get

  for (appWidgetId in appWidgetIds) {
    locationMaybe: Maybe<LocationWidget> = dataSource.getByAppWidgetId(appWidgetId)
    // -> add each Maybe to `observableOfMaybes`
  }

  return observableOfMaybes
    .subscribeOn(Schedulers.newThread())
    // somehow return if any of the `isCurrentLocation` are true
    .filter({ location -> location.isCurrentLocation == true })
    .toSingle()
}

1 Ответ

0 голосов
/ 26 октября 2018

Вы можете создать Observable of Maybes, используя flatMapMaybe(). Для этого вам нужно будет разыграть IntArray до vararg.

Observable.fromArray(*appWidgetIds.toTypedArray())
        .flatMapMaybe { getByAppWidgetId(it) }
...