Kotlin将对象转换为另一个对象
http://cm08323.tmweb.ru/android/determinace/json/images.json我有一些JSON到服务器。
我的数据库类:
@Entity data class Image(val url: String = "", val urlAnswer: String = "", val race: String = "") : DisplayableItem, Persistable
api接口:
interface ImagesAdi { @GET("android/determinace/json/images.json") fun getImages(): Single<List<ImagesResponse>> } ... class ImagesResponse( val images: List<ImageSingle>) class ImageSingle(val url: String, val url_answer: String, val race: String)
我的映射器用于转换ImagesResponse到Image :
@Singleton class ChooseRaceMapper @Inject constructor() : (ImageSingle) -> Image { override fun invoke(response: ImageSingle): Image = Image(response.url, response.url_answer, response.race) }
从List <ImageSingle>到List <Image>应该如何看起来像变压器?
我有trasformer单个对象,他看起来像这样:
fun chooseRace(): Single<Image> = imagesAdi.getSingleImage() .map { chooseRaceMapper.invoke(it) } .doOnSuccess { database.addDetectedResult(it) .subscribeIgnoreResult() requestImages() }
你能帮我写“ List ”类型的变压器吗? 我试着做,但没有成功。 谢谢。 对不起我的英语不好。
或者从List到List的转换应该在Mapper类中更好? (在方法调用中)
考虑到你的images.json ,你的getImages()
不应该返回一个List
的Single
。
@GET("android/determinace/json/images.json") fun getImages(): Single<ImagesResponse>
然后,您可以使用Kotlin List.map()
映射器来映射列表。
imagesAdi.getImages() .map { list -> list.map { chooseRaceMapper.invoke(it) } } .doOnSuccess { }
接口声明是错误的:
interface ImagesAdi { @GET("android/determinace/json/images.json") fun getImages(): Single<List<ImagesResponse>> }
它应该是(根据你的JSON):
interface ImagesAdi { @GET("android/determinace/json/images.json") fun getImages(): Single<ImagesResponse> }
对于映射部分,这样的事情会做:
imagesAdi.getImages().map { it.images } .map { /* your mapper here */ } ...