Heim >Java >javaLernprogramm >Wie kann ich Listen mit Java 8 Streams effizient in Karten übersetzen?

Wie kann ich Listen mit Java 8 Streams effizient in Karten übersetzen?

DDD
DDDOriginal
2024-12-28 13:16:10591Durchsuche

How Can I Efficiently Translate Lists to Maps Using Java 8 Streams?

Effiziente Übersetzung von Listen in Karten mit Java 8-Streams

In Java 8 besteht eine häufige Aufgabe darin, eine Liste von Objekten mithilfe von Streams und Lambdas in eine Karte zu konvertieren. Dies kann auf verschiedene Weise erreicht werden, abhängig vom gewünschten Verhalten und der Verfügbarkeit von Bibliotheken von Drittanbietern wie Guava.

Ansatz für Java 7 und darunter

Traditionell Mapping Eine Liste zu einer Karte erforderte manuelle Iteration und eine handgeschriebene Schleife:

private Map<String, Choice> nameMap(List<Choice> choices) {
    final Map<String, Choice> hashMap = new HashMap<>();
    for (final Choice choice : choices) {
        hashMap.put(choice.getName(), choice);
    }

    return hashMap;
}

Guava-Based Lösungen

Guava bietet eine praktische Methode, Maps.uniqueIndex, zum Generieren von Karten aus Listen basierend auf einem angegebenen Schlüsselextraktor.

Guava mit Java 7

private Map<String, Choice> nameMap(List<Choice> choices) {
    return Maps.uniqueIndex(choices, new Function<Choice, String>() {

        @Override
        public String apply(final Choice input) {
            return input.getName();
        }

    });
}

Guave mit Java 8 Lambdas

Die Nutzung von Java 8-Lambdas vereinfacht den Code noch weiter:

private Map<String, Choice> nameMap(List<Choice> choices) {
    return Maps.uniqueIndex(choices, Choice::getName);
}

Collectors to the Rescue

Angebote der Collectors-Klasse von Java 8 eine robuste Implementierung für die Zuordnung von Listen zu Karten. Der toMap-Kollektor benötigt zwei Argumente:

  • Eine Schlüsselextraktionsfunktion (eine Funktion, die den Schlüssel für jedes Element abruft)
  • Eine Wertextraktionsfunktion (eine Funktion, die den Wert für jedes Element abruft). element)

In diesem Fall können wir Choice::getName und Function.identity() verwenden, um den Schlüssel und den Wert abzurufen. bzw.:

Map<String, Choice> result =
    choices.stream().collect(Collectors.toMap(Choice::getName,
                                              Function.identity()));

Das obige ist der detaillierte Inhalt vonWie kann ich Listen mit Java 8 Streams effizient in Karten übersetzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn