Konvertieren eine Liste in eine Map in Java

Rupam Yadav 12 Oktober 2023
  1. Konvertieren eine Liste in eine Map mit ArrayList und HashMap
  2. Konvertieren eine Liste in eine Map mit Stream und Collectors in Java
  3. Konvertieren eine Liste in eine Map mit Sortieren und Sammeln in Java
Konvertieren eine Liste in eine Map in Java

Eine Liste ermöglicht das Führen einer geordneten Sammlung von Objekten. Ein Map-Objekt bildet Schlüssel auf Werte ab. In Java gibt es mehrere Methoden, um eine Liste von Objekten in eine Map umzuwandeln. In diesem Artikel werden wir einige davon kennenlernen.

Konvertieren eine Liste in eine Map mit ArrayList und HashMap

Die List-Schnittstelle in Java ermöglicht eine geordnete Sammlung von Objekten und speichert die doppelten Werte. Es bietet indexbasierte Methoden zum Aktualisieren, Löschen, Einfügen und Suchen von Elementen. Wir können auch Nullwerte in der List speichern. ArrayList, LinkedList sind einige der Klassen, die die List-Schnittstelle implementieren.

Die Map-Schnittstelle in Java ordnet eindeutige Schlüssel Werten zu und kann keine doppelten Schlüssel enthalten. Es verfügt über nützliche Methoden zum Suchen, Aktualisieren und Einfügen von Elementen basierend auf diesem eindeutigen Schlüssel. Die Klasse HashMap implementiert die Schnittstelle Map.

Die Klasse Book hat drei Member-Variablen bookName, author, id und Getter-Methoden für diese Attribute. Wir haben die Methode toString() überschrieben, um die Daten der Book-Klasse zu formatieren. Ein Objekt der Klasse Book wird erstellt. Die Methode add() der Schnittstelle List fügt Objekte in die bookList ein.

Wir erstellen ein Map-Objekt mit der HashMap-Klasse, die den Schlüssel vom Typ Integer und den Wert vom Typ Book enthält. Wir verwenden eine erweiterte for-Schleife, in der wir die put()-Methode verwenden und alle Book-Daten aus der bookList zur Map hinzufügen.

Die Methode put() nimmt zwei Argumente entgegen. Wir haben auf das Attribut id zugegriffen, indem wir getId() aufgerufen und als Schlüssel verwendet und das Buchklassenobjekt b als Wert für diesen bestimmten Schlüssel gespeichert haben. Wir können das Objekt bookMap wie in der Ausgabe gezeigt drucken.

class Book {
  int id;
  String bookName;
  String author;
  public Book(int id, String bookName, String author) {
    this.id = id;
    this.bookName = bookName;
    this.author = author;
  }

  public int getId() {
    return id;
  }

  public String getAuthor() {
    return author;
  }

  public String getBookName() {
    return bookName;
  }

  @Override
  public String toString() {
    return "Book{"
        + " bookName='" + bookName + '\'' + ", author='" + author + '\'' + '}';
  }
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {
  public static void main(String[] args) {
    List<Book> bookList = new ArrayList<>();
    bookList.add(new Book(1, "Barney's Version", "Mordecai Richler"));
    bookList.add(new Book(2, "The Unsettlers", "Mark Sundeen"));
    bookList.add(new Book(3, "The Debt to Pleasure", "John Lanchester"));

    Map<Integer, Book> bookMap = new HashMap();
    for (Book b : bookList) {
      bookMap.put(b.getId(), b);
    }
    System.out.println("BookMap " + bookMap.toString());
  }
}

Ausgabe:

BookMap {1=Book{ bookName="Barney's Version", author='Mordecai Richler'}, 2=Book{ bookName='The Unsettlers', author='Mark Sundeen'}, 3=Book{ bookName='The Debt to Pleasure', author='John Lanchester'}}

Konvertieren eine Liste in eine Map mit Stream und Collectors in Java

Es ist einfach, die Lambda-Funktion mit Stream und Collectors in Java 8 zu verwenden, um die obige Aufgabe zu erfüllen. Die Methode stream() gibt einen Stream von Objekten der Klasse Book aus der bookList zurück.

Um diese Elemente zu sammeln, verwenden wir die Methode collect() der Klasse Stream. Die Elemente werden in einer Map gesammelt, also haben wir diese Collectors.toMap() verwendet. Der Schlüssel ist die id und speichert das Book-Objekt als Wert. Indem wir result1 als Ausgabe drucken, können wir sehen, dass wir bookList in eine Map konvertiert haben.

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Test {
  public static void main(String[] args) {
    List<Book> bookList = new ArrayList<>();
    bookList.add(new Book(1, "Barney's Version", "Mordecai Richler"));
    bookList.add(new Book(2, "The Unsettlers", "Mark Sundeen"));
    bookList.add(new Book(3, "The Debt to Pleasure", "John Lanchester"));

    Map<Integer, String> result1 =
        bookList.stream().collect(Collectors.toMap(Book::getId, Book::toString));
    System.out.println("Result 1 : " + result1);
  }
}

Ausgabe:

Result 1 : {1=Book{ bookName="Barney's Version", author='Mordecai Richler'}, 2=Book{ bookName='The Unsettlers', author='Mark Sundeen'}, 3=Book{ bookName='The Debt to Pleasure', author='John Lanchester'}}

Konvertieren eine Liste in eine Map mit Sortieren und Sammeln in Java

Wir können den Stream des Klassenobjekts Book von bookList sortieren, indem wir die id in umgekehrter Reihenfolge vergleichen. Wir rufen zuerst comparingInt() auf, wo wir die id übergeben, die vom Typ int ist, und kehren dann die Reihenfolge um, indem wir die Methode reverse() aufrufen.

Wir können den sortierten Stream auf einem Objekt der Klasse Map sammeln. Wenn es einen doppelten Schlüssel gibt, der in unserem Fall 2 ist, dann nimmt die Map den neuen Wert für denselben Schlüssel, der (oldValue, newValue) -> newValue erklärt.

import java.util.*;
import java.util.stream.Collectors;
public class Test {
  public static void main(String[] args) {
    List<Book> bookList = new ArrayList<>();
    bookList.add(new Book(1, "Barney's Version", "Mordecai Richler"));
    bookList.add(new Book(2, "The Unsettlers", "Mark Sundeen"));
    bookList.add(new Book(2, "The Debt to Pleasure", "John Lanchester"));

    Map result1 = bookList.stream()
                      .sorted(Comparator.comparingInt(Book::getId).reversed())
                      .collect(Collectors.toMap(Book::getId, Book::toString,
                          (oldValue, newValue) -> newValue, LinkedHashMap::new));

    System.out.println("Result 1 : " + result1);
  }
}

Ausgabe:

Result 1 : {2=Book{ bookName='The Debt to Pleasure', author='John Lanchester'}, 1=Book{ bookName="Barney's Version", author='Mordecai Richler'}}
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Verwandter Artikel - Java List

Verwandter Artikel - Java Map