Comment ajouter un élément à une ArrayList dans Kotlin?

Réponses:

98

Pour les personnes qui migrent depuis java, In Kotlin Listest par défaut une version immuable et modifiable de Lists est appelée MutableList.

Par conséquent, si vous avez quelque chose comme:

val list: List<String> = ArrayList()

Dans ce cas, vous n'obtiendrez pas de add()méthode car la liste est immuable. Par conséquent, vous devrez déclarer un MutableListcomme indiqué ci-dessous:

val list: MutableList<String> = ArrayList()

Vous verrez maintenant une add()méthode et vous pouvez ajouter des éléments à n'importe quelle liste.

Tarun
la source
5
Merci! Je me suis cogné la tête sur cette méthode plus dans Arrays ...
dasfima
1
Sympa, exactement ce que je recherche. Merci.
Sam Chen
Quelle est la différence d'utilisation entre val list: MutableList<String> = ArrayList()et val list = mutableListOf<String>()?
Sam Chen
77

Si vous avez une collection MUTABLE :

val list = mutableListOf(1, 2, 3)
list += 4

Si vous avez une collection IMMUTABLE :

var list = listOf(1, 2, 3)
list += 4

notez que j'utilise valpour la liste mutable pour souligner que l'objet est toujours le même, mais que son contenu change.

Dans le cas de la liste immuable, vous devez la créer var. Un nouvel objet est créé par l' +=opérateur avec la valeur supplémentaire.

guenhter
la source
7
faire +=dans une liste non mutable, exiger de copier tous les éléments de la liste dans une nouvelle liste mutable puis la réaffecter à votre liste actuelle. Je ne savais pas qu'il convenait de déclarer votre liste comme var. de toute façon, déclarer une liste var n'est pas une bonne idée pour moi.
crgarridos
1
Si une liste est immuable, vous n'avez pas d'autre option que de la déclarer comme var. Si une liste immuable est déclarée comme val, la liste ne pourra jamais changer. Il serait simplement possible de le réaffecter à une autre variable.
guenhter le
1
Exactement, je ne veux pas permettre de changer la référence de mes variables. cela peut avoir un effet secondaire dans les tâches externes / simultanées. mieux créer une copie pour extraire la logique. Mais cela sort du cadre de la question.
crgarridos
24

Si vous souhaitez utiliser spécifiquement java ArrayList, vous pouvez faire quelque chose comme ceci:

fun initList(){
    val list: ArrayList<String> = ArrayList()
    list.add("text")
    println(list)
}

Sinon, la réponse @guenhter est celle que vous recherchez.

Pokemzok
la source