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

Java 将类对象列表映射到另一个列表,java,class,kotlin,Java,Class,Kotlin,我有以下两门课。originalPerson和originalAddress。originalPerson有一个名为location的可用地址列表 class originalPerson ( val firstName: kotlin.String, val LastName: kotlin.String, val isAvailable: kotlin.Boolean, val location: kotlin.collections.List<orig

我有以下两门课。
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,
)

如果您能帮助我将
List
映射到
List
,我将不胜感激。提前谢谢。

如果我没弄错的话,你就快到了,只需要再拿一张地图:

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()
                 )
     }
private fun List.tocustomaddress()=
映射{customAddress(it.first,it.second)}
val result=it.value.flatMap{r->r.fieldsMap.entries}
.map{r->customPerson(
r、 名字,
r、 姓,
r、 location.toCustomAddresses()
)
}

就我个人而言,我更喜欢这种方法,但我认为这取决于您和您自己的指导方针。

这些是否需要是不相关的课程?您的OriginalPerson类(按照惯例,类名总是以大写字母开头)基本上是您的CustomPerson,并添加了一些字段;因此,显而易见的实现是将OriginalPerson作为CustomPerson的子类;这样,您就不必重复它们共享的字段(构造函数中可能除外)。你不需要做任何映射;OriginalPerson是(特定类型的)CustomPerson,因此您可以在任何需要CustomPerson的地方使用它。类似地,OriginalAddress可以是CustomAddress的子类。(整洁地处理地址列表会稍微复杂一些,并且可能需要CustomPerson类上的类型参数。)
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()
                 )
     }