Transformación de Kotlin de objects a otros objects

http://cm08323.tmweb.ru/android/determinace/json/images.json Tengo algo de json en el server.

Mi class de database:

@Entity data class Image(val url: String = "", val urlAnswer: String = "", val race: String = "") : DisplayableItem, Persistable 

Interfaz para 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) 

Mi asignador para la transformación de ImagesResponse a la image :

 @Singleton class ChooseRaceMapper @Inject constructor() : (ImageSingle) -> Image { override fun invoke(response: ImageSingle): Image = Image(response.url, response.url_answer, response.race) } 

¿Cómo debería parecerse un transformador de List <ImageSingle> a List <Image> ?

Tengo transformador para objects individuales, se ve así:

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

¿Me pueden ayudar a escribir un transformador para el tipo " Lista "? Yo tratando de hacerlo, pero no funcionó. Gracias. Lo siento por mi ingles.

¿O la transformación de List to List debería ser mejor en la class Mapper? (En el método invocar)

Teniendo en count su images.json , sus getImages() no deberían devolver un Single de una List .

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

Entonces podría usar el List.map() Kotlin List.map() para mapear la list.

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

La statement de la interfaz es incorrecta:

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

Debería ser (de acuerdo con su JSON):

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

Y para la parte del mapeo, algo como esto hará:

 imagesAdi.getImages().map { it.images } .map { /* your mapper here */ } ... 
  • ¿Cómo mejorar la syntax de kotlin lambda?
  • Cómo get el nombre de file de class actual en kotlin
  • libgdx ground no funciona
  • No se puede recibir un post de grupo usando smack
  • ¿Cómo se soluciona la initialization del campo val con el proxy Spring Security?
  • Error de compilation de Android 3.0 Canary: Versión major.minor no compatible 52.0
  • Alerta Anko de Android con error de visualización personalizada (Kotlin)
  • ¿Cómo manejar la class duplicada antes de la compilation kotlin-android?
  • ¿Cómo se ejecuta el método de suspensión a través de la reflexión?
  • En kotlin, ¿cómo hacer que el colocador de properties en el constructor primario sea privado?
  • Reemplace la interfaz genérica de Java en Kotlin para Databinding