我有一个列表List<FileModel>
FileModel
只是一个包含id: Int
id
- 我需要获取并投射到位图的照片文件的ID
我有一个请求:
fun getFile(fileId: Int): Single<ResponseBody>
此请求返回ResponseBody
,我们可以将其转换为位图
和
fun generatePhoto(responseBody: ResponseBody): Single<Bitmap?>
我想要的是创建一个功能
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
}
我尝试过这样的事情,但这是完全错误的
fun getPhotos(list: List<FileModel>): Single<List<Bitmap>> {
return Observable.fromIterable(list)
.flatMap { getFile(it.id) }
// How to call generatePhoto(...) here?
}
答案 0 :(得分:1)
Observable.fromIterable(list)应为列表中的每个项目发出一个事件,这意味着您在getPhotos中返回的类型为Flowable<Bitmap>
,因为Flowable可以返回多个值。
我认为你真正想要的是:
fun getPhotos(list: List<FileModel>): Flowable<Bitmap> {
return Observable.fromIterable(list)
.map { getFile(it.id) }
.map { generatePhoto(it) }
}
如果要发出位图列表,可以像这样使用单个
fun getPhotos(list: List<FileModel>): Single<List<Bitmap>> {
return Single.just(list)
.map { it.map { getFile(it.id) } }
.flatMap {
Single.just(it.map { generatePhoto(it) })
}
}