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中,你可以使用过滤器函数),并返回新的列表。