web-dev-qa-db-fra.com

Comment initialiser la liste <T> dans Kotlin?

Je vois que Kotlin a un List<out E> collection mais je ne sais pas comment l’initialiser. En Java, je pourrais écrire:

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

Comment puis-je obtenir la même chose à Kotlin?

53
Ali Dehghani

listOf fonction de premier plan à la rescousse:

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

Juste pour ajouter plus d’informations, Kotlin propose à la fois des List et MutableList immuables qui peuvent être initialisés avec listOf et mutableListOf. Si les offres de Kotlin concernant les collections vous intéressent davantage, vous pouvez consulter la documentation officielle de référence à l’adresse Collections .

11
gmariotti

Les réponses positives de Ilya et gmariotti sont bonnes et correctes. Certaines alternatives sont cependant réparties dans les commentaires, et certaines ne sont pas mentionnées du tout.

Cette réponse comprend un résumé de celles déjà données, ainsi que des clarifications et quelques autres alternatives.

Listes immuables ( List )

Les listes immuables, ou en lecture seule, sont des listes qui ne peuvent pas avoir d'éléments ajoutés ou supprimés.

  • Comme le souligne Ilya, listOf() fait souvent ce que vous voulez. Cela crée une liste immuable, semblable à Arrays.asList en Java.
  • Comme frogcoder indique dans un commentaire, emptyList() fait la même chose, mais renvoie naturellement une liste vide.
  • listOfNotNull() renvoie une liste immuable excluant tous les éléments null.

Listes mutables ( MutableList )

Les listes mutables peuvent avoir des éléments ajoutés ou supprimés.

  • gmariotti suggère d'utiliser mutableListOf() , qui correspond généralement à ce que vous souhaitez lorsque vous devez ajouter ou supprimer des éléments de la liste.
  • Greg T donne l'alternative, arrayListOf() . Cela crée un mutable ArrayList . Si vous voulez vraiment une implémentation ArrayList, utilisez ceci sur mutableListOf().
  • Pour les autres implémentations List , qui n'ont aucune fonction de confort, elles peuvent être initialisées comme, par exemple, val list = LinkedList<String>(). C'est simplement créer l'objet en appelant son constructeur. Utilisez ceci uniquement si vous voulez vraiment, par exemple, une implémentation de LinkedList .
7
Magnilex

Laissez-moi vous expliquer quelques cas d'utilisation: créons une liste immuable (non modifiable) avec des éléments d'initialisation:

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

créons une liste modifiable (modifiable) avec des champs d'initialisation:

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

Déclarons un immuable (non modifiable) puis instancions-le:

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

Et enfin, ajoutez quelques éléments supplémentaires à chacun:

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 
4
CodeRanger