Kotlin编辑列表
在Kotlin中编辑不可变List
的最好方法是什么?
我明白, List
实际上并不是不可变的,但是如果我将一个List
传递给一个函数,并且我需要整个列表减去一个元素,那么是否有支持的方式来处理? 如果我想要一个额外的元素整个列表呢?
如果您自己创建列表,而不是调用listOf("foo", "bar")
调用mutableListOf("foo", "bar")
来获取MutableList
的实例。
如果你得到这个列表,例如作为一个方法的参数,调用它的toMutableList()
来得到一个可变的副本 。
或者,使用诸如map()
或filter()
之类的许多内置扩展方法之一来获取具有修改过的元素的新列表。 例如,要得到一个没有前n个元素的列表,使用drop(n)
。 要获得只有前n个元素调用take(n)
。 在这里你可以找到更多的内置扩展方法。
如果您需要连接两个列表,只需使用如下所示的加号运算符: val newList = list1 + list2
。
请注意,修改您的方法的参数列表可能是一种代码味道。 这就是为什么所有的内置方法返回副本。 也是你的假设
我知道List实际上并不是不变的
是错的。 正如你在这里看到的,如果你调用不带参数的listOf()
,标准库将返回一个不可变的空列表。
在Java中, List
接口在默认情况下是可变的,当你试图修改一个不可变列表(比如通过调用Arrays.asList()
创建的列表)时可能会导致异常。 这就是为什么在Kotlin相反的情况。
如果你正在处理不可变列表,你想要做的是创建新的列表。 所以在你的情况下,如果你想要一个没有元素的列表,那么过滤该元素(在Kotlin中,你可以使用过滤器函数),并返回新的列表。