有没有一种简单的方法可以在 Kotlin 中深度克隆列表?

Is there an easy way for deep cloning a list in Kotlin?

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

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

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