web-dev-qa-db-fra.com

Comment cloner ou copier une liste dans kotlin

Comment copier une liste dans Kotlin?

J'utilise

val selectedSeries = mutableListOf<String>()
selectedSeries.addAll(series)

Y a-t-il un moyen plus facile?

62
Audi

Cela fonctionne bien.

val selectedSeries = series.toMutableList()
89
Audi

Je peux trouver deux manières alternatives:

1. val selectedSeries = mutableListOf<String>().apply { addAll(series) }

2. val selectedSeries = mutableListOf(*series.toTypedArray())

Mise à jour: avec le nouveau moteur Type Inference (opt-in dans Kotlin 1.3), nous pouvons omettre le paramètre de type générique dans le 1er exemple et obtenir ceci:

1. val selectedSeries = mutableListOf().apply { addAll(series) }

FYI.Le moyen d'inclure la nouvelle Inférence est kotlinc -Xnew-inference ./SourceCode.kt pour la ligne de commande ou kotlin { experimental { newInference 'enable'} pour Gradle. Pour plus d’informations sur la nouvelle inférence de type, consultez cette vidéo: KotlinConf 2018 - Nouvelle inférence de type et fonctionnalités de langage apparentées de Svetlana Isakova , en particulier "inférence pour les constructeurs" à 30 '

9
Jacob Wu

Vous pouvez utiliser

Liste -> toList ()

Tableau -> toArray ()

ArrayList -> toArray ()

MutableList -> toMutableList ()


Exemple:

val array = arrayListOf("1", "2", "3", "4")

val arrayCopy = array.toArray() // copy array to other array

Log.i("---> array " ,  array?.count().toString())
Log.i("---> arrayCopy " ,  arrayCopy?.count().toString())

array.removeAt(0) // remove first item in array 

Log.i("---> array after remove" ,  array?.count().toString())
Log.i("---> arrayCopy after remove" ,  arrayCopy?.count().toString())

journal d'impression:

array: 4
arrayCopy: 4
array after remove: 3
arrayCopy after remove: 4
6
Rasoul Miri

Si votre liste est en attente classe de données kotlin , vous pouvez le faire

selectedSeries = ArrayList(series.map { it.copy() })
5
Levon Petrosyan

Pour une copie peu profonde, je suggère

.map{it}

Cela fonctionnera pour de nombreux types de collection.

3
Lensflare

Je voudrais utiliser la méthode d'extension toCollection() :

val original = listOf("A", "B", "C")
val copy = original.toCollection(mutableListOf())

Cela créera un nouveau MutableList, puis ajoutera chaque élément de l'original à la liste nouvellement créée.

Le type inféré ici sera MutableList<String>. Si vous ne souhaitez pas exposer la mutabilité de cette nouvelle liste, vous pouvez déclarer le type explicitement comme une liste immuable:

val copy: List<String> = original.toCollection(mutableListOf())
2
Ben P.

Juste comme en Java:

Liste:

    val list = mutableListOf("a", "b", "c")
    val list2 = ArrayList(list)

Carte:

    val map = mutableMapOf("a" to 1, "b" to 2, "c" to 3)
    val map2 = HashMap(map)

En supposant que vous visiez la machine virtuelle Java; Je ne suis pas sûr que cela fonctionne pour d'autres cibles, car il repose sur les constructeurs de copie de ArrayList et HashMap.

0
noamtm