在 Kotlin 中将一个 ArrayList 复制到另一个 ArrayList

7

我将尝试在Kotlin中将一个ArrayList复制到另一个ArrayList

第一个ArrayList

private var leadList1: ArrayList<Lead> = ArrayList()

第二个 ArrayList

val leadList2: ArrayList<Lead?>?

我尝试使用addAll()leadList1.addAll(leadList2)

但它没有起作用。

显示错误:

Required: Collection<Lead>
Found: kotlin.collections.ArrayList<Lead?>?
3个回答

18

这样做是不安全的,因为你的第一个列表只能包含类型为Lead的对象,而你的第二个列表将Lead?作为其类型参数,意味着它可能包含null值。你无法将它们添加到第一个列表中。

解决此问题的方法取决于您的上下文,但您可以让第一个列表也包含可空元素:

private var leadList1: ArrayList<Lead?> = ArrayList()

或者你可以将第二个列表中非空元素仅添加到第一个列表中:

leadList1.addAll(leadList2.filterNotNull())

而且无论哪种情况,你都必须对 leadList2 进行空值检查,因为整个列表本身也被标记为可能为空,这是由类型 ArrayList<Lead?>? 的最后一个 ? 表示的。

if (leadList2 != null) {
    leadList1.addAll(leadList2.filterNotNull())
}

7
您可以将另一个List实例简单地传递到您的新List的构造函数中。
val originalList = arrayListOf(1,2,3,4,5)

val orginalListCopy = ArrayList(originalList)

1

请执行以下操作:

leadList1.addAll(leadList2.orEmpty().filterNotNull())

若要按属性过滤,可以这样做:

leadList1.addAll(leadList2.orEmpty().filter { item -> item?.type == YourTypeString })


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接