将类对象列表映射到另一个列表

时间:2020-08-28 09:42:36

标签: java class kotlin

我有以下两个课程。 originalPersonoriginalAddressoriginalPerson有一个可用地址列表,名为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>**)} 的语法上,我将提供一些帮助。预先感谢。

1 个答案:

答案 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()
                 )
     }

我个人更喜欢这种方法,但是我认为这取决于您和您自己的准则。

相关问题