it-swarm.com.de

So klonen oder kopieren Sie eine Liste in kotlin

Wie kopiere ich eine Liste in Kotlin?

Ich benutze

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

Gibt es einen einfacheren Weg?

62
Audi

Das funktioniert gut.

val selectedSeries = series.toMutableList()
89
Audi

Ich kann zwei alternative Wege finden:

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

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

Update: Mit der neuen Type Inference Engine (Opt-In in Kotlin 1.3) können wir den generischen Typparameter im 1. Beispiel weglassen und haben Folgendes:

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

Der Weg, neue Inferenz zu aktivieren, ist kotlinc -Xnew-inference ./SourceCode.kt für Befehlszeile oder kotlin { experimental { newInference 'enable'} für Gradle. Weitere Informationen zur neuen Typinferenz finden Sie in folgendem Video: KotlinConf 2018 - Neue Typinferenz und verwandte Sprachfunktionen von Svetlana Isakova , insbesondere 'Inferenz für Builder' bei 30 '

9
Jacob Wu

Sie können verwenden

Liste -> toList ()

Array -> toArray ()

ArrayList -> toArray ()

MutableList -> toMutableList ()


Beispiel:

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())

Protokoll drucken:

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

Wenn Ihre Liste Kotlin-Datenklasse enthält, können Sie dies tun

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

Für eine flache Kopie schlage ich vor

.map{it}

Das funktioniert bei vielen Sammlungsarten.

3
Lensflare

Ich würde die toCollection() -Erweiterungsmethode verwenden:

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

Dies erstellt ein neues MutableList und fügt dann jedes Element des Originals der neu erstellten Liste hinzu.

Der hier abgeleitete Typ ist MutableList<String>. Wenn Sie die Änderbarkeit dieser neuen Liste nicht offen legen möchten, können Sie den Typ explizit als unveränderliche Liste deklarieren:

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

Genau wie in Java:

Liste:

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

Karte:

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

Angenommen, Sie zielen auf die JVM ab. Ich bin nicht sicher, ob es für andere Ziele funktioniert, da es auf den Kopierkonstruktoren von ArrayList und HashMap basiert.

0
noamtm