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 */ } ... 
  • ¿Cuál es la forma más inteligente de copyr un map en Kotlin?
  • Configurando Jetty con SSL / TLS y Keystore
  • Asignación variable de nula Kotlin
  • Capture y guarde la image con Kotlin en Android Studio
  • El error "no debe ser nulo" en Kotlin
  • Kotlin mutableList () devuelto desde Map :: getOrElse no expone add ()
  • GridView dentro de ListRow usando la biblioteca de Leanback
  • Kotlin: Collection no tiene tipo genérico ni OneToMany.targetEntity ()
  • ¿Por qué mi escena es nula?
  • Python vars () en Kotlin
  • Cómo exportar funciones de Kotlin a Javascript con el nombre correcto