Kotlin编辑列表

spi*_*ce7 7 kotlin

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

我明白这List实际上并不是不可变的,但是如果我将一个List函数传递给函数并且我需要整个列表减去一个元素,那么有没有一种支持的方法来处理它?如果我想要一个带有附加元素的整个列表呢?

Kir*_*man 13

如果您自己创建列表,而不是调用listOf("foo", "bar")call mutableListOf("foo", "bar")来获取a的实例MutableList.

如果您获得列表,例如作为方法的参数,请调用toMutableList()它以获取可变副本.

或者,使用的许多内置的扩展方法像一个map()filter()得到一个新的 与修饰的元素列表.例如,要获取不使用前n个元素的列表drop(n).只获得前n个元素的调用take(n).在这里,您可以找到更多内置扩展方法.

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

请注意,修改作为方法参数的列表可能会产生代码异味.这就是所有内置方法返回副本的原因.也是你的假设

我知道List实际上并不是不可变的

是错的.正如您在此处所看到的,如果您在listOf()不带参数的情况下调用,标准库将返回一个不可变的空列表.

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

  • 如果您有一个ArrayList,并将其作为List传递,那么该List实际上不是不可变的.这就是我的意思,它实际上并不是一成不变的. (2认同)