¿Cómo inicializar List <T> en Kotlin?

81

Veo que Kotlin tiene una List<out E>colección y me preguntaba sobre diferentes formas de inicializar una. En Java, podría escribir:

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

¿Cómo puedo lograr lo mismo en Kotlin?

Ali Dehghani
fuente
10
listOf¿ Con ?
Michael

Respuestas:

130

listOf función de alto nivel al rescate:

val geeks = listOf("Fowler", "Beck", "Evans")
Ilya
fuente
11
Llamar a listOf sin ningún parámetro le da una lista vacía, o simplemente llame a emptyList para hacerla más legible.
frogcoder
4
También hay arrayListOf
Greg T
¿Es mutable para modificaciones posteriores?
IgorGanapolsky
1
@IgorGanapolsky El tipo devuelto es de solo lectura List<T>, por lo que no se debe asumir que es mutable.
Ilya
15

Tanto las respuestas de Ilya como de gmariotti con voto positivo son buenas y correctas. Sin embargo, algunas alternativas se exponen en los comentarios y algunas no se mencionan en absoluto.

Esta respuesta incluye un resumen de las ya dadas, junto con aclaraciones y un par de otras alternativas.

Listas inmutables ( List)

Las listas inmutables o de solo lectura son listas que no pueden tener elementos agregados o eliminados.

  • Como señala Ilya, a listOf()menudo hace lo que quiere. Esto crea una lista inmutable, similar a la Arrays.asListde Java.
  • Como indica frogcoder en un comentario, emptyList()hace lo mismo, pero naturalmente devuelve una lista vacía.
  • listOfNotNull()devuelve una lista inmutable que excluye todos los nullelementos.

Listas mutables ( MutableList)

Las listas mutables pueden tener elementos agregados o eliminados.

  • gmariotti sugiere usar mutableListOf(), que normalmente es lo que desea cuando necesita agregar o eliminar elementos de la lista.
  • Greg T da la alternativa, arrayListOf(). Esto crea un mutable ArrayList. En caso de que realmente desee una ArrayListimplementación, use esto de nuevo mutableListOf().
  • Para otras Listimplementaciones, que no tienen funciones de conveniencia, se pueden inicializar como, por ejemplo val list = LinkedList<String>(),. Eso es simplemente crear el objeto llamando a su constructor. Use esto solo si realmente desea, por ejemplo, una LinkedListimplementación.
Magnilex
fuente
13

Solo para agregar más información, Kotlin ofrece inmutable Listy MutableListque se puede inicializar con listOfy mutableListOf. Si está más interesado en lo que ofrece Kotlin con respecto a las colecciones, puede consultar los documentos de referencia oficiales en Colecciones .

gmariotti
fuente
7

Permítanme explicar algunos casos de uso: creemos una lista inmutable (no modificable) con elementos de inicialización:

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

vamos a crear una lista mutable (modificable) con campos de inicialización:

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

Declaremos un inmutable (no modificable) y luego lo instanciamos:

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

Y finalmente agregue algunos elementos adicionales a cada uno:

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 
CodeRanger
fuente
1

De esta manera, puede inicializar la Lista en Kotlin

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