xsk*_*kit 5 android kotlin rx-android rx-kotlin rx-java2
我有一个清单 List<FileModel>
FileModel 只是一个类包含 id: Int
id - 是我需要获取并投射到位图的照片文件的 ID
我有个请求:
fun getFile(fileId: Int): Single<ResponseBody>
Run Code Online (Sandbox Code Playgroud)
此请求返回ResponseBody,我们可以将其转换为 Bitmap
和
fun generatePhoto(responseBody: ResponseBody): Single<Bitmap?>
Run Code Online (Sandbox Code Playgroud)
我想要的是创建一个函数
fun getPhotos(list: List<FileModel>): Single<List<Bitmap>> {
// Execute getFile(...) for each item in the list
// Cast getFile(...) result to Bitmap using generatePhoto(...)
// Return a list of Bitmaps
}
Run Code Online (Sandbox Code Playgroud)
我试过这样的事情,但这是完全错误的
fun getPhotos(list: List<FileModel>): Single<List<Bitmap>> {
return Observable.fromIterable(list)
.flatMap { getFile(it.id) }
// How to call generatePhoto(...) here?
}
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
fun getPhotos(list: List<FileModel>): Single<List<Bitmap>> {
// Get an Observable of the list
return Observable.fromIterable(list)
// Get a Single<ResponseBody> for every FileModel
.flatMapSingle { getFile(it.id) }
// Get a Single<Bitmap> for every ResponseBody
.flatMapSingle { file -> generatePhoto(file) }
// Put everything back on a list
.toList()
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以根据flapMapping需要遍历列表,然后最后将其重新组合为一个列表。该toList()运营商仅仅是一个方便的是放在一起的项目之前发出。
并调用此函数只需:
getPhotos(list)
.doOnSuccess { resultList ->
Log.d("Rx", "doOnSuccess.resultList=[$resultList]")
}
.subscribe()
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果你有RxKotlin一个依赖项,你可以Observable从List带有扩展函数的a 中获取,如下所示:
myList.toObservable()
| 归档时间: |
|
| 查看次数: |
3014 次 |
| 最近记录: |