如何将值添加到可变列表,然后添加到不可变列表

时间:2019-04-02 08:57:05

标签: list kotlin immutability mutability

因此,我使用的是自定义SDK,需要在其中输入一系列数字,例如1到100,作为Strings到listOf集合中。是否有一些有效的方法可以通过for循环来完成?我几乎没有Kotlin的经验,所以所有帮助都值得赞赏!

3 个答案:

答案 0 :(得分:2)

您不能真正“添加到不可变的[列表]”。

如果您已经在某个地方使用了可变列表,则可以使用toList()(如@anber的答案)来获取只读版本,或者也可以将其直接传递给需要{{ 1}}(如果您在框架使用列表时不更改列表)。

如果您只是想从一个数字范围构建一个不可变的数字字符串列表,可以使用从范围对象本身开始的基本功能操作来实现:

List

请注意此处的Kotlin范围语法。这样,您实际上就不必使用val list = (1..100).map { "$it" } 循环,甚至不必使用临时可变列表。除非它是业务的一部分,否则可变物在Kotlin中并不是很惯用。

您也可以使用for代替字符串模板,但是我发现它对于模板更易读。

答案 1 :(得分:0)

如果我对您的理解正确,则可以创建可变列表,循环添加项目,然后将其转换为不可变列表:

val mutableList = mutableListOf<String>()
for (i in 0..10) {
    mutableList.add(i.toString())
}
val immutableList = mutableList.toList()

答案 2 :(得分:0)

有一个看起来像构造函数的函数,但实际上是顶级函数。您可以像这样使用它:

<requestHandler name="/myhandler" class="solr.SearchHandler">
        <lst name="invariants">
            <str name="handlerName">myhandler</str>
            .
            .
        </lst>
        .
        .
    </requestHandler>

val l = List(99) { "${it + 1}" } 的类型为l(不可变)。