Kotlin 编辑列表
Kotlin Editing List
在 Kotlin 中编辑不可变 List
的最佳方法是什么?
我知道 List
实际上并不是不可变的,但是如果我将 List
传递给函数并且我需要整个列表减去单个元素,是否有支持的方法处理那个?如果我想要整个列表包含一个附加元素怎么办?
如果您要处理不可变列表,您要做的是创建新列表。所以在你的情况下,如果你想要一个没有元素的列表,那么过滤掉那个元素(在 Kotlin 中你可以使用 filter 函数)和 return 新列表。
如果您自己创建列表,而不是调用 listOf("foo", "bar")
调用 mutableListOf("foo", "bar")
来获取 MutableList
.
的实例
如果你得到列表,例如作为方法的参数,对其调用 toMutableList()
以获得可变的 copy.
或者使用许多内置扩展方法之一,如 map()
或 filter()
来获得包含修改元素的 new 列表。例如,要获得没有前 n 个元素的列表,请使用 drop(n)
。要仅获取前 n 个元素,请调用 take(n)
。 Here您可以找到更多内置扩展方法。
如果需要连接两个列表,只需使用加号运算符,如下所示:val newList = list1 + list2
.
请注意,修改作为方法参数的列表可能会产生代码味道。这就是所有内置方法 return 复制的原因。还有你的假设
I understand that List is not actually immutable
错了。如你所见here,如果你不带参数调用listOf()
,标准库将return一个不可变的空列表。
在 Java 中,List
接口默认是可变的,当您尝试修改不可变列表(例如通过调用 Arrays.asList()
创建的列表)时可能会导致异常。这就是为什么在 Kotlin 中情况恰恰相反。
在 Kotlin 中编辑不可变 List
的最佳方法是什么?
我知道 List
实际上并不是不可变的,但是如果我将 List
传递给函数并且我需要整个列表减去单个元素,是否有支持的方法处理那个?如果我想要整个列表包含一个附加元素怎么办?
如果您要处理不可变列表,您要做的是创建新列表。所以在你的情况下,如果你想要一个没有元素的列表,那么过滤掉那个元素(在 Kotlin 中你可以使用 filter 函数)和 return 新列表。
如果您自己创建列表,而不是调用 listOf("foo", "bar")
调用 mutableListOf("foo", "bar")
来获取 MutableList
.
如果你得到列表,例如作为方法的参数,对其调用 toMutableList()
以获得可变的 copy.
或者使用许多内置扩展方法之一,如 map()
或 filter()
来获得包含修改元素的 new 列表。例如,要获得没有前 n 个元素的列表,请使用 drop(n)
。要仅获取前 n 个元素,请调用 take(n)
。 Here您可以找到更多内置扩展方法。
如果需要连接两个列表,只需使用加号运算符,如下所示:val newList = list1 + list2
.
请注意,修改作为方法参数的列表可能会产生代码味道。这就是所有内置方法 return 复制的原因。还有你的假设
I understand that List is not actually immutable
错了。如你所见here,如果你不带参数调用listOf()
,标准库将return一个不可变的空列表。
在 Java 中,List
接口默认是可变的,当您尝试修改不可变列表(例如通过调用 Arrays.asList()
创建的列表)时可能会导致异常。这就是为什么在 Kotlin 中情况恰恰相反。