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) 

我的映射器用于转换ImagesResponseImage

 @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()不应该返回一个ListSingle

 @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 */ } ...