![](/img/trans.png)
[英]Kotlin Map<String, List<Object>> compare to another Map<String, List<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() } }
我試圖設置你的例子。 如前所述,您錯過了Api
、 Dto
、 Entity
。 但是在添加它們之后,我得到了一個工作示例(可以編譯)。 由於等於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.