ReactiveX - от одного<T> до одного<R>

Я пытаюсь сделать пример проекта с подходом чистой архитектуры, и у меня есть некоторые трудности для преобразования одного в другой.

У меня есть сервис по модернизации (сингл):

@GET("nearbysearch/json") fun getNearbyPlaces(@Query("type") type: String, @Query("location") location: String, @Query("radius") radius: Int): Single<GooglePlacesNearbySearchResult>

И я использую это в моей реализации репозитория:

override fun getNearbyPlaces(type: String, location: String, radius: Int): Single<List<Place>> {
    return googlePlacesApi.getNearbyPlaces(type, location, radius)
        .subscribeOn(Schedulers.io())
        .observeOn(Schedulers.computation())
        .doOnSuccess { googlePlacesNearbySearchResult -> nearbyPlaceListResultMapper.transform(googlePlacesNearbySearchResult) }
}

В этом сингле я хочу превратить свой Single<GooglePlacesNearbyResultSearch> к Single<List<Place>>и я хочу сделать это с моим картографом NearbyPlaceListResultMapper

Проблема в том, что мне не удается Single<List<Place>> в конце. Я могу преобразовать его в Observable или Completable, но не в Single.

Может ли кто-нибудь помочь мне сделать это более чистым способом?

Спасибо

1 ответ

Если предположить, nearbyPlaceListResultMapper.transform возвращает тип List<Place>> Вы можете использовать map операция.

fun getNearbyPlaces(type: String, location: String, radius: Int): Single<List<Place>> {
    return googlePlacesApi.getNearbyPlaces(type, location, radius)
        .subscribeOn(Schedulers.io())
        .map { nearbyPlaceListResultMapper.transform(it) }
        .observeOn(Schedulers.computation())
}
Другие вопросы по тегам