【问题标题】:copy one arraylist to another arraylist in kotlin将一个数组列表复制到 kotlin 中的另一个数组列表
【发布时间】:2018-05-06 14:34:30
【问题描述】:

我正在尝试在 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?>?

【问题讨论】:

    标签: arraylist kotlin


    【解决方案1】:

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

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

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

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

    leadList1.addAll(leadList2.filterNotNull())
    

    无论哪种情况,您都必须对leadList2 执行空检查,因为整个列表本身也被标记为可能为空,由ArrayList&lt;Lead?&gt;? 类型的最后一个? 表示。

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

    【讨论】:

      【解决方案2】:

      您可以简单地将另一个 List 实例传递给新 List 的构造函数

      val originalList = arrayListOf(1,2,3,4,5)
      
      val orginalListCopy = ArrayList(originalList)
      

      【讨论】:

        【解决方案3】:

        这样做: leadList1.addAll(leadList2.orEmpty().filterNotNull())

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-05
          • 2017-11-18
          • 1970-01-01
          • 2017-08-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多