将一个包含list的对象映射到另一个包含list的对象



我正在尝试将一个对象t1映射到另一个对象t2。但是对象里面有一个列表。这是我的代码。但是当我得到错误说不能投射。这是我从API

获取的对象
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()

}
}

另一个要映射的数据类。

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()

}

这是我用来转换成实体的扩展函数。

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
)
}
)

以及我如何使用扩展函数将dto转换为实体。

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

我试着设置你的例子。如前所述,你漏掉了Api,Dto,Entity。但是在添加它们之后,我得到了一个工作示例(可以编译)。因为类名相等,所以不容易理解。也许你也纠结于此,把错误的类型联系在一起?这是你的意图吗?:

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
)
})
}

最新更新