Kotlin 将对象转换为另一个对象

Tip*_*pok 5 android json 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
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

我用于将ImagesResponse转换为Image 的映射器:

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

List< ImageSingle >List< Image > 的转换器应该如何?

我有单个对象的变压器,他看起来像这样:

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

            requestImages()
        }
Run Code Online (Sandbox Code Playgroud)

你能帮我写一个“ List ”类型的转换器吗?我尝试成功,但没有成功。谢谢。对不起我的英语不好。

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

tyn*_*ynn 2

考虑到您的images.json,您getImages()不应该返回 a Singleof a List

@GET("android/determinace/json/images.json")
fun getImages(): Single<ImagesResponse>
Run Code Online (Sandbox Code Playgroud)

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

imagesAdi.getImages()
    .map { list -> list.map { chooseRaceMapper.invoke(it) } }
    .doOnSuccess { }
Run Code Online (Sandbox Code Playgroud)