ReactiveX - от одного <T>до одного <R> - PullRequest
0 голосов
/ 10 сентября 2018

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

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

@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>> в конце. Я могу преобразовать его в Наблюдаемый или Завершаемый, но не в Единый.

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

Спасибо

1 Ответ

0 голосов
/ 10 сентября 2018

Если 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())
}
...