簡體   English   中英

Map 一個 object 里面有一個列表到另一個 object 里面有列表

[英]Map an object that having list inside to another object with the list

我正在嘗試 map 一個對象 1 到另一個對象 2。 但是 object1 中有一個列表。 這是我的代碼。 但是什么時候我收到錯誤消息說無法投射。 這是我從 API 得到的 object

    interface  Api {


    @GET("/api/")
    fun getUsers(@Query("results") results: Int): Single<Dto.Users>


    sealed class Dto {
        data class Users(
            @SerializedName("results") var resultDto: List<Result>
        ) : Dto()

        data class Result(
            var cell: String,
            var email: String,
            var gender: String,
            var name: Name,
            var nat: String,
            var phone: String
        ) : Dto()

        data class Name(
            var first: String,
            var last: String,
            var title: String
        ) : Dto()


    }

}

另一個數據class到map同。

sealed class Entity {

    data class Users(
        val results: List<Result>
    ) : Entity()


    data class Result(
        var cell: String,
        var email: String,
        var gender: String,
        var name: Name,
        var nat: String,
        var phone: String
    ) : Entity()

    data class Name(
        var first: String,
        var last: String,
        var title: String
    ) : Entity()


}

這是我用來將 dto 轉換為實體的擴展 function。

    Api.Dto.Users.map() = Entity.Users(
    resultDto.map { result ->
        Entity.Result(
            result.cell,
            result.email,
            result.gender,
            Entity.Name(result.name.first, result.name.last, result.name.title),
            result.nat,
            result.phone
        )
    }
)

以及我如何使用擴展名 function 將 dto 轉換為實體。

  val data = dataFromServer.applyIoScheduler().map { userObj -> { userObj.map() } }

我試圖設置你的例子。 如前所述,您錯過了ApiDtoEntity 但是在添加它們之后,我得到了一個工作示例(可以編譯)。 由於等於class這個名字,不太好理解。 也許您也為此苦苦掙扎並鏈接了錯誤的類型? 這是你的意圖嗎?:

open class Entity {
    data class Users(
        var resultDto: List<Entity.Result>
    ) : Dto()

    data class Result(
        var cell: String,
        var email: String,
        var gender: String,
        var name: Entity.Name,
        var nat: String,
        var phone: String
    ) : Dto()

    data class Name(
        var first: String,
        var last: String,
        var title: String
    ) : Dto()
}

open class Dto {

    data class Users(
        val results: List<Dto.Result>
    ) : Entity()


    data class Result(
        var cell: String,
        var email: String,
        var gender: String,
        var name: Dto.Name,
        var nat: String,
        var phone: String
    ) : Entity()

    data class Name(
        var first: String,
        var last: String,
        var title: String
    ) : Entity()
}

fun Dto.Result.map(): Entity.Users {
    return Entity.Users(
        listOf(this).map { result ->
            Entity.Result(
                result.cell,
                result.email,
                result.gender,
                Entity.Name(result.name.first, result.name.last, result.name.title),
                result.nat,
                result.phone
            )
        })
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM