Kotlin合并了两个可空的可变列表
val mutableList1: MutableList? val mutableList2: MutableList?
addAll方法可以用来合并可空的可变列表,但是,在这里它会引发我编译时错误。
例:
val map1 = listOne?.map { TeamInvitationData(it) } val map2 = listTwo?.map { TeamInvitationData(it) } map1.addAll(map2)
types接口失败,请尝试显式指定types参数。
在这里任何方式可以合并这两个数组,事先感谢。
这里有几个解决方案。
-
如果您需要将所有元素添加到
mutableList1
:val mutableList1: MutableList
? = ... val mutableList2: MutableList ? = ... mutableList1?.let { list1 -> mutableList2?.let(list1::addAll) } -
如果你需要新的可空列表 ,结果如下:
val mutableList1: MutableList
? = ... val mutableList2: MutableList ? = ... val list3: List ? = mutableList1?.let { list1 -> mutableList2?.let { list2 -> list1 + list2 } } -
如果你需要新的可空的可变列表作为结果:
val mutableList1: MutableList
? = ... val mutableList2: MutableList ? = ... val list3: MutableList ? = mutableList1 ?.let { list1 -> mutableList2?.let { list2 -> list1 + list2 } } ?.toMutableList() -
如果您需要新的非空列表作为结果:
val mutableList1: MutableList
? = ... val mutableList2: MutableList ? = ... val list3: List = mutableList1.orEmpty() + mutableList2.orEmpty()
根据你的片段,这些片段没有一致的整体,我猜想你实际上想达到什么目的:
val mutableList1: MutableList? = ... val mutableList2: MutableList? = ... val mapped1 = mutableList1?.mapTo(ArrayList()) { TeamInvitationData(it) } val mapped2 = mutableList2?.mapTo(ArrayList()) { TeamInvitationData(it) } mapped1?.addAll(mapped2.orEmpty())
要注意的关键点是map()
不管输入列表的types如何都会返回一个不可变列表。 要得到一个可变列表,你必须使用mapTo(destination) { ... }
。 一旦解决了,你可以使用addAll()
,如最后一行所示。