如何在Kotlin中初始化List <t>?

时间:2016-04-27 17:25:50

标签: list kotlin

我看到Kotlin有一个List<out E>集合,但我不知道如何初始化它。在Java中,我可以写:

List<String> geeks = Arrays.asList("Fowler", "Beck", "Evans");

我如何在Kotlin中实现同样的目标?

7 个答案:

答案 0 :(得分:74)

listOf救援的顶级功能:

val geeks = listOf("Fowler", "Beck", "Evans")

答案 1 :(得分:10)

仅仅为了添加更多信息,Kotlin提供了可以使用ListMutableList初始化的不可变listOfmutableListOf。如果您对Kotlin关于收藏的内容更感兴趣,可以访问Collections的官方参考文档。

答案 2 :(得分:6)

Ilyagmariotti投票赞成的答案都是正确的。但是,有些替代方法会在评论中散布开来,而有些根本没有提及。

此答案包括已经给出的答案的摘要,说明和其他几种选择。

不可变列表(List

不可变或只读列表是不能添加或删除元素的列表。

  • 正如Ilya指出的那样,listOf()通常会执行您想要的操作。这将创建一个不可变的列表,类似于Java中的Arrays.asList
  • 正如frogcoder在评论中指出的那样,emptyList()的作用相同,但自然会返回一个空列表。
  • listOfNotNull()返回不包含所有null元素的不可变列表。

可变列表(MutableList

可变列表可以添加或删除元素。

  • gmariotti建议使用mutableListOf(),这通常是您需要在列表中添加或删除元素时想要的。
  • Greg T提供了替代方案arrayListOf()。这将创建一个可变的ArrayList。如果您确实想要ArrayList实现,请在mutableListOf()上使用它。
  • 对于其他List实现,这些实现没有任何便利功能,可以将其初始化为val list = LinkedList<String>()。那只是通过调用对象的构造函数来创建对象。仅在您确实需要LinkedList实现的情况下才使用此功能。

答案 3 :(得分:1)

通过这种方式,您可以在Kotlin中初始化列表

val alphabates : List<String> = listOf("a", "b", "c")

答案 4 :(得分:1)

在 Kotlin 中还有另一种构建列表的方法,在撰写本文时处于实验状态,但希望很快就会改变。

inline fun <E> buildList(builderAction: MutableList<E>.() -> Unit): List<E>
<块引用>

通过使用给定的 builderAction 填充 MutableList 并返回具有相同元素的只读列表来构建新的只读列表。

示例:

val list = buildList {
    testDataGenerator.fromJson("/src/test/resources/data.json").forEach {
        add(dao.insert(it))
    }
}

如需进一步阅读,请查看官方 doc

答案 5 :(得分:0)

让我解释一些用例: 让我们创建一个带有初始化项的不可变(不可更改)列表:

val myList = listOf("one" , "two" , "three")

让我们使用初始化字段创建一个可变(可变)列表:

val myList = mutableListOf("one" , "two" , "three")

让我们声明一个不可变(不可更改),然后实例化它:

lateinit var myList : List<String>
// and then in the code :
myList = listOf("one" , "two" , "three")

最后在其中添加一些额外的项目:

val myList = listOf("one" , "two" , "three")
myList.add() //Unresolved reference : add, no add method here as it is non mutable 

val myMutableList = mutableListOf("one" , "two" , "three")
myMutableList.add("four") // it's ok 

答案 6 :(得分:0)

如果你想在没有类型的情况下初始化:

var temp: ArrayList<String> = ArrayList()