我有以下两个课程。 originalPerson
和originalAddress
。 originalPerson
有一个可用地址列表,名为location
。
class originalPerson (
val firstName: kotlin.String,
val LastName: kotlin.String,
val isAvailable: kotlin.Boolean,
val location: kotlin.collections.List<originalAddress>
)
class originalAddress (
val first: String? = null,
val second: String? = null,
val third: String? = null,
)
我还有另外两个类,它们与上面的类非常相似,但是具有自定义字段数。
class customPerson (
val firstName: kotlin.String,
val LastName: kotlin.String,
val location: kotlin.collections.List<customAddress>
)
class customAddress (
val first: String? = null,
val second: String? = null,
)
我有一个返回originalPerson
对象的方法,但我想将其映射到customPerson
对象,并返回它。我不确定如何正确地做到这一点。
我已经将firstName
的{{1}}和lastName
映射到originalPerson
,但我不知道如何将customPerson
映射到{{ 1}}。到目前为止,这是我的代码:
List<originalAddress>
在将List<customAddress>
映射到val result = it.value.flatMap { r -> r.fieldsMap.entries}
.map { r -> customPerson(r.firstName, r.LastName, **List<customAddress>**)}
的语法上,我将提供一些帮助。预先感谢。
答案 0 :(得分:2)
如果我做对了,您就快到了,只需要另外一张地图:
val result = it.value.flatMap { r -> r.fieldsMap.entries}
.map { r -> customPerson(
r.firstName,
r.LastName,
r.location.map { customAddress(it.first, it.second) }
)
}
我只是像最初一样使用map
并创建自定义地址列表。
如果需要,您可以为此创建一个方法:
private fun toCustomAddresses(originalPerson: originalPerson) =
originalPerson.location.map { customAddress(it.first, it.second) }
并像这样使用它:
val result = it.value.flatMap { r -> r.fieldsMap.entries}
.map { r -> customPerson(
r.firstName,
r.LastName,
toCustomAddresses(r)
)
}
甚至作为扩展功能:
private fun List<originalAddress>.toCustomAddresses() =
map { customAddress(it.first, it.second) }
val result = it.value.flatMap { r -> r.fieldsMap.entries}
.map { r -> customPerson(
r.firstName,
r.LastName,
r.location.toCustomAddresses()
)
}
我个人更喜欢这种方法,但是我认为这取决于您和您自己的准则。