Ich habe eine LinkedHashMap, die mehrere Einträge enthält. Ich möchte die mehreren Einträge im ersten Schritt auf einen einzigen reduzieren und diesen dann auf einen einzigen String abbilden. Zum Beispiel: ich mit einer Karte wie diese bin ab:Java 8 Stream reduzieren Karte
{"<a>"="</a>", "<b>"="</b>", "<c>"="</c>", "<d>"="</d>"}
Und schließlich möchte ich so einen String erhalten:
<a><b><c><d></d></c></b></a>
(In diesem Fall wird der String enthält die Schlüssel in Reihenfolge, als die Werte in umgekehrter Reihenfolge. Aber das ist nicht wirklich wichtig, ich möchte eine allgemeine Lösung)
Ich denke, ich brauche map.entrySet(). stream(). reduce(), aber ich habe keine Ahnung, was in der Reduce-Methode geschrieben werden soll und wie weitergemacht werden soll.
Es ist nicht klar, was Sie mit "reduzieren Sie die mehrere Einträge auf einen einzigen". Ein einziger von was? Ein einziger Eintrag? Und was meinst du mit einer allgemeinen Lösung? – gdejohn
Ich möchte mehrere Einträge auf einen einzelnen Eintrag mit einer Funktion reduzieren. Die reduce() -Methode verwendet BinaryOperator. In meinem Beispiel erhält dieser BinaryOperator zwei Einträge, concats die zwei Schlüssel und "reverse concats" die zwei Werte. Aber ich weiß nicht, wie ich es umsetzen soll. Auch die reduce() benötigt ein Identity-Element –
Ist die Existenz eines intermediate reduced entry wirklich eine Voraussetzung? Das widerspricht der Aussage "Ich hätte gerne eine allgemeine Lösung". Z.B. Sie könnten einfach 'String result = String.join (" ", map.keySet()) + map.values () verwenden. stream(). reduce (" ", (a, b) -> b + a);' . Wenn Sie auf einer einzigen "Stream" -Operation bestehen, können Sie 'String result = Stream.concat (map.keySet(). Stream(), map.values (). Stream() verwenden. Collect (ArrayDeque :: new, ArrayDeque :: addFirst, (a, b) -> b.descendingIterator(). ForEachRemaining (a :: addFirst)). Stream()) .collect (Collectors.joining()); 'ohne' Map.Entry'-Instanzen zu konstruieren . –
Holger