Kotlin编辑列表

时间:2015-05-28 03:54:16

标签: kotlin

在Kotlin中编辑不可变List的最佳方法是什么?

我理解List实际上并不是不可变的,但是如果我将List传递到函数中并且我需要整个列表减去单个元素,那么是否有一种支持的方式处理那个?如果我想要整个列表中有一个额外的元素呢?

2 个答案:

答案 0 :(得分:13)

如果您是自己创建列表,而不是致电listOf("foo", "bar")致电mutableListOf("foo", "bar")以获取MutableList的实例。

如果您获得列表,例如作为方法的参数,在其上调用toMutableList()以获得可变的副本

或者,使用众多内置扩展程序之一(例如map()filter())来获取带有修改元素的列表。例如,要获取不包含前n个元素的列表,请使用drop(n)。要仅获取前n个元素,请调用take(n)Here您可以找到更多内置扩展方法。

如果您需要加入两个列表,只需使用加号运算符,如下所示:val newList = list1 + list2

注意,修改作为方法参数的列表可能是代码气味。这就是为什么所有内置方法都返回副本的原因。也是你的假设

  

我理解List实际上并不是不可变的

错了。如您所见here,如果您在没有参数的情况下调用listOf(),标准库将返回一个不可变的空列表。

在Java中,List接口在默认情况下是可变的,当您尝试修改不可变列表(例如通过调用Arrays.asList()创建的列表)时,可能会导致异常。这就是为什么Kotlin的情况恰恰相反。

答案 1 :(得分:2)

如果您正在处理不可变列表,您要做的是创建新列表。因此,在您的情况下,如果您想要一个没有元素的列表,那么过滤掉该元素(在Kotlin中您可以使用过滤器函数)并返回新列表。