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:
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!