Java 8 streams: Iteration über Anzeigen von Listen
Habe ich das folgende Objekt und einer Karte:
MyObject
String name;
Long priority;
foo bar;
Map<String, List<MyObject>> anotherHashMap;
Will ich wandeln die Karte in eine andere Karte. Die Schlüssel des Ergebnis-Karte ist der Schlüssel der input-Karte. Der Wert der result-map tritt die Eigenschaft "name" des Objekts, nach Priorität geordnet.
Den Bestellung und Extraktion der name ist nicht das problem, aber ich konnte nicht put it in das Ergebnis anzeigen. Ich mache es das alte Java 7 Weg, aber es wäre schön, es ist möglich, die Verwendung der streaming-API.
Map<String, List<String>> result = new HashMap<>();
for (String identifier : anotherHashMap.keySet()) {
List<String> generatedList = anotherHashMap.get(identifier).stream()...;
teaserPerPage.put(identifier, generatedList);
}
Hat jemand eine Idee? Ich habe versucht, aber steckengeblieben:
anotherHashMap.entrySet().stream().collect(Collectors.asMap(..., ...));
- Die Absicht ist nicht klar. Könnten Sie erklären, was Sie tun wollen?
- Ist diese Erklärung besser?
- Was ist Ihr resultierenden Karten Werte eigentlich sein? Eine Liste der einzelnen
name
aus dem vorherigen Schlüssel?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im wesentlichen stream über jeden Eintrag festgelegt und sammeln es in eine neue Karte. Zur Berechnung des Wertes in die neue Karte, Sie Strom über die
List<MyOjbect>
von der alten Karte, Sortieren und anwenden von mapping-und collection-Funktion. In diesem Fall habe ichMyObject::getName
wie die Zuordnung und sammelte die daraus resultierenden Namen in eine Liste.Ähnlich wie Antwort von Mike Kobit, aber die Sortierung angewendet wird, an der richtigen Stelle (d.h. dem Wert sortiert, nicht map-Einträge) und präziser statische Methode
Comparator.comparing
wird verwendet, um Comparator für die Sortierung.Zur Erzeugung einer anderen Karte, die wir haben, etwas wie die folgenden:
Oben ich bin Neuerstellung der Karte wieder, aber Sie können die Schlüssel oder den Wert nach Ihren Bedürfnissen.
.stream().collect
glaube ich. Auch Sie müssen zum anzeigen der Liste derMyObject
so etwas wieelem -> elem.getValue().stream().map(e -> e.name)