【问题标题】:Is there an easy way for deep cloning a list in Kotlin?有没有一种简单的方法可以在 Kotlin 中深度克隆列表?
【发布时间】:2022-01-14 20:10:08
【问题描述】:

我需要克隆一个 Any 类型的 ArrayList,它只包含字符串,而 Arraylists 只包含 ... 的字符串和 arrayLists。浅拷贝对我不起作用,因为我需要克隆每个元素。我的想法是遍历每个元素或将 ArrayList 转换为 String ,然后再转换回 ArrayList (使用字符串中的逗号和括号)。知道如何更容易做到这一点吗? (Java 的答案也很受欢迎,因为我认为它可以转换为 Kotlin)

【问题讨论】:

    标签: java list kotlin arraylist clone


    【解决方案1】:

    您可以使用简单的递归方法来深度复制每个嵌套列表。下面是一个使用 Java 流的演示:

    List<?> deepCopy(List<?> list) {
        return list.stream()
                .map(e -> e instanceof List ? deepCopy((List<?>)e) : e)
                .collect(Collectors.toList());
    }
    

    【讨论】:

      【解决方案2】:
      fun cloned(arrayList: ArrayList<Any>): ArrayList<Any> {
        return arrayList.map {
          when (it) {
            is ArrayList<*> -> cloned(it.toList() as ArrayList<Any>)
            else            -> it
          }
        } as ArrayList<Any>
      }
      

      【讨论】:

      • 效果也很好。您的答案已经在 Kotlin 中,并且使用了 ArrayList 类型,所以我什至不必转换表达式,谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 2010-10-07
      • 2011-12-22
      相关资源
      最近更新 更多