有没有一种简单的方法可以在 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>
}
我需要克隆一个 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>
}