简化一个方法其中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()
}
如您所见,我已经定义了 name
和 language
变量,以便在地图部分使用它们来创建 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()
}
我 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()
}
如您所见,我已经定义了 name
和 language
变量,以便在地图部分使用它们来创建 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()
}