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> } ... class ImagesResponse( val images: List) 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 List 应该如何看起来像变压器?

我有trasformer单个对象,他看起来像这样:

 fun chooseRace(): Single = imagesAdi.getSingleImage() .map { chooseRaceMapper.invoke(it) } .doOnSuccess { database.addDetectedResult(it) .subscribeIgnoreResult() requestImages() } 

你能帮我写“ List ”types的变压器吗? 我试着做,但没有成功。 谢谢。 对不起我的英语不好。

或者从List到List的转换应该在Mapper类中更好? (在方法调用中)

2 Solutions collect form web for “Kotlin将对象转换为另一个对象”

考虑到你的images.json ,你的getImages()不应该返回一个ListSingle

 @GET("android/determinace/json/images.json") fun getImages(): Single 

然后,您可以使用Kotlin List.map()映射器来映射列表。

 imagesAdi.getImages() .map { list -> list.map { chooseRaceMapper.invoke(it) } } .doOnSuccess { } 

接口声明是错误的:

 interface ImagesAdi { @GET("android/determinace/json/images.json") fun getImages(): Single> } 

它应该是(根据你的JSON):

 interface ImagesAdi { @GET("android/determinace/json/images.json") fun getImages(): Single } 

对于映射部分,这样的事情会做:

 imagesAdi.getImages().map { it.images } .map { /* your mapper here */ } ... 
  • 如何获得IntelliJ IDEA代码完成作为Kotlin顶级函数导入静态Java方法?
  • Kotlin:从类对象获取超类 - 对象推理错误
  • 把这个java代码翻译成kotlin的最好方法
  • Kotlin编译器是否始终保留字节码中的参数名称?
  • 在多个接收器上调用一个通用的方法
  • AccessToken.getCurrentAccessToken()总是在Kotlin中返回null
  • 如何配置一个eclipse项目来使用Kotlin和JPA / Hibernate?
  • 关于Kotlin和function
  • 未解决的参考sqrt()Kotlin
  • 带有Java接口的Kotlin EJB抛出UndeclaredThrowableException
  • 有没有更好的方法来访问可空属性?
  • Kotlin language will be the best programming language for Android.