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参数。

在这里任何方式可以合并这两个数组,事先感谢。

这里有几个解决方案。

  1. 如果您需要将所有元素添加mutableList1

     val mutableList1: MutableList? = ... val mutableList2: MutableList? = ... mutableList1?.let { list1 -> mutableList2?.let(list1::addAll) } 
  2. 如果你需要新的可空列表 ,结果如下:

     val mutableList1: MutableList? = ... val mutableList2: MutableList? = ... val list3: List? = mutableList1?.let { list1 -> mutableList2?.let { list2 -> list1 + list2 } } 
  3. 如果你需要新的可空的可变列表作为结果:

     val mutableList1: MutableList? = ... val mutableList2: MutableList? = ... val list3: MutableList? = mutableList1 ?.let { list1 -> mutableList2?.let { list2 -> list1 + list2 } } ?.toMutableList() 
  4. 如果您需要新的非空列表作为结果:

     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() ,如最后一行所示。