简化一个方法其中returns一个RxJava Single类型

Simplify a method which returns a RxJava Single type

我 return 一个 RxJava Single 类型,如下所示:

private fun getSpeciesWrapper(
    character: Character, getSpecieUseCase: GetSpecieUseCase, getPlanetUseCase: GetPlanetUseCase,
): Single<List<SpecieWrapper>> {
    var name: String? = null
    var language: String? = null
    return Flowable.fromIterable(character.specieUrls)
            .flatMapSingle { specieUrl -> getSpecieUseCase(specieUrl) }
            .flatMapSingle { specie ->
                name = specie.name
                language = specie.language
                getPlanetUseCase(specie.homeWorld)
            }.map { planet ->
                SpecieWrapper(name, language, planet.population)
            }.toList()
}

如您所见,我已经定义了 namelanguage 变量,以便在地图部分使用它们来创建 Specie 包装器列表。

在 RxJava2 中是否有任何解决方案可以通过删除这些局部变量(名称和语言)来简化 Single 类型?

您可以简单地将 map 调用嵌套在 flatMapSingle 调用中:

private fun getSpeciesWrapper(
    character: Character, getSpecieUseCase: GetSpecieUseCase, getPlanetUseCase: GetPlanetUseCase,
): Single<List<SpecieWrapper>> {
    return Flowable.fromIterable(character.specieUrls)
            .flatMapSingle { specieUrl -> getSpecieUseCase(specieUrl) }
            .flatMapSingle { specie -> getPlanetUseCase(specie.homeWorld)
                .map { planet ->
                    SpecieWrapper(specie.name, specie.language, planet.population)
                }
            }.toList()
}