【问题标题】:Kotlin transformation of objects to another objectsKotlin 将对象转换为另一个对象
【发布时间】:2017-10-15 03:08:18
【问题描述】:

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 转换为 Image 的映射器:

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

ListList 的转换器应该如何?

我有单个物体的变形器,他看起来像这样:

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

            requestImages()
        }

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

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

【问题讨论】:

  • 嗯,你有一个图像列表,但你只需要一个。我想你只需要在列表中选择一个。你要哪一个?
  • @marstran 我需要将对象从 List 转换为 List 和函数 chooseRace 返回 Single> 的列表类型

标签: android json kotlin


【解决方案1】:

考虑到您的 images.json,您的 getImages() 不应返回 SingleList

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

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

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

【讨论】:

    【解决方案2】:

    接口声明错误:

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

    【讨论】:

      猜你喜欢
      • 2021-08-14
      • 2015-09-03
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 2020-01-10
      • 2013-09-18
      相关资源
      最近更新 更多