Konvertieren Sie eine Liste in eine Karte in Kotlin

David Mbochi Njonge 20 Juni 2023
  1. Erstellen Sie ein Kotlin-Projekt
  2. Verwenden Sie die associate()-Methode, um eine Liste in eine Karte in Kotlin zu konvertieren
  3. Verwenden Sie die associateBy()-Methode, um eine Liste in eine Karte in Kotlin zu konvertieren
  4. Verwenden Sie die associateWith()-Methode, um eine Liste in eine Karte in Kotlin zu konvertieren
  5. Verwenden Sie die groupBy()-Methode, um eine Liste in eine Karte in Kotlin zu konvertieren
  6. Abschluss
Konvertieren Sie eine Liste in eine Karte in Kotlin

Kotlin bietet verschiedene Sammlungen; die gebräuchlichsten sind List, Map und Set. Bei der Entwicklung von Anwendungen gibt es Situationen, in denen wir eine Sammlungsart in eine andere umwandeln müssen, um ein bestimmtes Ziel zu erreichen.

Beispielsweise haben Sie möglicherweise eine Liste mit doppelten Elementen, und wir wissen, dass eine Menge keine doppelten Elemente zulässt. Wir können die Liste in eine Menge umwandeln, und die Duplikate werden entfernt, ohne irgendeine Logik zu schreiben.

Kotlin ermöglicht uns diese Vorgänge, indem es verschiedene Methoden bereitstellt, die wir für die Sammlungen verwenden können, um eine Sammlung in einen anderen Sammlungstyp zu konvertieren.

In diesem Lernprogramm lernen wir die verschiedenen Möglichkeiten kennen, die wir nutzen können, um eine Listendatenstruktur in eine Kartendatenstruktur zu konvertieren.

Erstellen Sie ein Kotlin-Projekt

Öffnen Sie IntelliJ und wählen Sie Neu > Datei > Projekt. Geben Sie im sich öffnenden Fenster den Projektnamen als list-to-map ein, wählen Sie Kotlin im Abschnitt Sprache und IntelliJ im Abschnitt Build System.

Drücken Sie abschließend die Schaltfläche Erstellen, um ein Kotlin-Projekt zu erstellen. Erstellen Sie eine Main.kt-Datei im Ordner kotlin und kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein.

data class Employee(val id: Number,
                    val firstName: String,
                    val email: String);

fun fetchEmployees(): List<Employee> {
    return listOf(
        Employee(1,"john", "john@gmail.com"),
        Employee(2,"mary","mary@gmail.com"),
        Employee(3,"jane","jane@gmail.com"),
        Employee(3,"abdul","abdul@gmail.com")
    );
}

In diesem Beispiel haben wir eine Datenklasse namens Employee erstellt, die uns hilft, eine Mitarbeiterliste List<Employee> in der Methode fetchEmployees() zu erstellen.

Wir werden die Methode fetchEmployees() in allen Beispielen verwenden, die wir in diesem Tutorial behandeln werden.

Verwenden Sie die associate()-Methode, um eine Liste in eine Karte in Kotlin zu konvertieren

Kopieren Sie den folgenden Code und fügen Sie ihn nach der Funktion fetchEmployees() in die Datei Main.kt ein.

fun usingAssociate(employees: List<Employee>): Map<Number, String> {
    return employees.associate { employee ->
        Pair(employee.id, employee.email)
    }
}

fun main(){
    println(usingAssociate(fetchEmployees()));
}

In diesem Beispiel haben wir unsere Liste in eine Map umgewandelt, die die employee.id als Schlüssel und die employee.email als String Map<Number, String> enthält. Beachten Sie, dass die Einfügungsreihenfolge unserer Karte so beibehalten wird, wie sie in der Liste war.

Die associate()-Methode ist eine Erweiterungsfunktion der Iterable-Schnittstelle, die eine Transformationsfunktion auf den Listenelementen verwendet, um ein Paar zu erstellen und dieses Paar als Karte zurückgibt.

Beachten Sie, dass wir die Werte, die wir zurückgeben möchten, explizit sowohl als Schlüssel als auch als Werte im erstellten Paar angegeben haben. Wenn der Schlüssel eines Paares dupliziert wird, wird das alte Paar durch das neue Paar ersetzt.

Zum Beispiel haben wir zwei Objekte in unserer Liste mit der gleichen ID von 3, das erste ist das von jane und das zweite das von abdul. Beim Einfügen der Elemente in die Karte wird jane durch abdul ersetzt.

Führen Sie den obigen Code aus und stellen Sie sicher, dass die Ausgabe wie unten gezeigt ist:

{1=john@gmail.com, 2=mary@gmail.com, 3=abdul@gmail.com}

Verwenden Sie die associateBy()-Methode, um eine Liste in eine Karte in Kotlin zu konvertieren

Kommentieren Sie das vorherige Beispiel aus und kopieren Sie den folgenden Code und fügen Sie ihn nach dem Kommentar in die Datei Main.kt ein.

fun usingAssociateBy(employees: List<Employee>): Map<Number, Employee> {
    return employees.associateBy { employee: Employee ->
        employee.id
    }
}

fun main(){
    println(usingAssociateBy(fetchEmployees()));
}

In diesem Beispiel haben wir eine Liste in eine Map umgewandelt, die als Schlüssel die employee.id enthält und das Employee-Objekt den Wert Map<Number, Employee> hat.

Die Methode associateBy() ist ebenfalls eine Erweiterungsfunktion der Schnittstelle Iterable. Wir müssen nur den Wert übergeben, der als Schlüssel in unserer Karte verwendet wird.

Die Funktion keySelector erhält diesen Schlüssel von jedem Objekt in der Liste und wendet ihn auf die Karte an. Die Werte der Karte werden zu den Objekten in unserer Liste.

Beachten Sie, dass die Funktion keySelector zwei Duplikate mit dem Wert 3 abruft, wie wir oben gesehen haben. Das alte Element wird durch das neue Element ersetzt.

Führen Sie diesen Code aus und stellen Sie sicher, dass die Ausgabe wie folgt aussieht:

{1=Employee(id=1, firstName=john, email=john@gmail.com),
 2=Employee(id=2, firstName=mary, email=mary@gmail.com),
 3=Employee(id=3, firstName=abdul, email=abdul@gmail.com)}

Verwenden Sie die associateWith()-Methode, um eine Liste in eine Karte in Kotlin zu konvertieren

Kommentieren Sie das vorherige Beispiel aus und kopieren Sie den folgenden Code und fügen Sie ihn nach dem Kommentar in die Datei Main.kt ein.

fun usingAssociateWith(employees: List<Employee>): Map<Employee, Number> {
    return employees.associateWith { employee ->
        employee.id
    }
}

fun main(){
    println(usingAssociateWith(fetchEmployees()));
}

In diesem Beispiel haben wir eine Liste in eine Map umgewandelt, die als Schlüssel das Employee-Objekt und als Wert Map<Employee, Number> die employee.id enthält.

Die Methode associateWith() ist eine Erweiterungsfunktion der Schnittstelle Iterable, und wir müssen nur das Element übergeben, das als Wert in unserer Map verwendet wird. Die Funktion valueSelector ruft die Werte von jedem Objekt in unserer Liste ab und wendet sie auf unsere Karte an.

Die Schlüssel der Karte werden zu den Elementen in unserer Liste. Da die Objekte Schlüssel in der Karte sind, haben wir keine Duplikate, aber zwei Elemente in unserer Karte haben den Wert 3.

Führen Sie diesen Code aus und stellen Sie sicher, dass die Ausgabe wie folgt aussieht:

{Employee(id=1, firstName=john, email=john@gmail.com)=1,
 Employee(id=2, firstName=mary, email=mary@gmail.com)=2,
 Employee(id=3, firstName=jane, email=jane@gmail.com)=3,
 Employee(id=3, firstName=abdul, email=abdul@gmail.com)=3}

Verwenden Sie die groupBy()-Methode, um eine Liste in eine Karte in Kotlin zu konvertieren

Kommentieren Sie das vorherige Beispiel aus und kopieren Sie den folgenden Code und fügen Sie ihn nach dem Kommentar in die Datei Main.kt ein.

fun usingGroupBy(employees: List<Employee>): Map<Number, List<Employee>> {
    return employees.groupBy { employee: Employee ->
        employee.id
    }
}

fun main(){
    println(usingGroupBy(fetchEmployees()));
}

In unseren ersten Beispielen haben wir gesehen, dass beim Konvertieren einer Liste in eine Karte alle Duplikate ersetzt werden. In Situationen, in denen Sie die Duplikate beibehalten möchten, verwenden wir die Methode groupBy().

In diesem Beispiel haben wir eine Liste in eine Map konvertiert, die den Schlüssel als employee.id enthält, und die Werte sind eine Liste von Mitarbeiterobjekten, gruppiert nach ihrer ID Map<Number, List<Employee>> .

Die Methode groupBy() ist ebenfalls eine Erweiterungsfunktion der Schnittstelle Iterable und verlangt von uns lediglich, den als Schlüssel verwendeten Wert in unserer Map zu übergeben. Die Funktion keySelector dieser Methode ruft den Schlüssel von jedem Objekt in der Liste ab und wendet ihn auf unsere Karte an.

Objekte mit derselben ID werden in einer Liste zusammengefasst. Führen Sie diesen Code aus und stellen Sie sicher, dass die Ausgabe wie unten gezeigt ist.

{1=[Employee(id=1, firstName=john, email=john@gmail.com)],
 2=[Employee(id=2, firstName=mary, email=mary@gmail.com)],
 3=[Employee(id=3, firstName=jane, email=jane@gmail.com),
    Employee(id=3, firstName=abdul, email=abdul@gmail.com)]}

Abschluss

In diesem Tutorial haben wir gelernt, wie man eine Liste in eine Karte umwandelt, indem man verschiedene Erweiterungsfunktionen der Iterable-Schnittstelle nutzt. Die Methoden, die wir behandelt haben, umfassen die Verwendung der Methode associate(), der Methode associateBy(), der Methode associateWith() und der Methode groupBy().

Beachten Sie, dass es andere Gruppierungsstrategien gibt, die Sie verwenden können, wie zum Beispiel groupingBy() und groupByTo().

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

Verwandter Artikel - Kotlin List