Котлинское преобразование объектов в объекты

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 to Image :

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

Как должен выглядеть трансформатор из списка <ImageSingle> в список <Image> ?

У меня есть trasformer для отдельных объектов, он выглядит так:

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

Можете ли вы помочь мне написать трансформатор для типа « Список »? Я пытаюсь это сделать, но это не сработало. Благодарю. Извините за мой английский.

Или преобразование из списка в список должно быть лучше в классе Mapper? (В вызове метода)

Учитывая ваши images.json , ваш getImages() не должен возвращать Single of List .

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

Затем вы можете использовать Kotlin List.map() mapper для отображения списка.

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