Ich habe String
und HashMap
wie unter codes:
und ich versuche, die Zeichenfolge durch die HashMap
-Werte zu ersetzen, aber dies funktioniert nicht, weil test
endgültig ist und nicht im Body von forEach
neu zugewiesen werden kann.
Gibt es also Lösungen, um String
durch HashMap
mit Java 8 Stream API zu ersetzen?
Da dies nicht nur mithilfe von forEach()
( message
muss effektiv final) erfolgen kann, könnte ein endgültiger Container (zB List
) erstellt werden, der ein einzelnes String
speichert, das neu geschrieben wird:
Beachten Sie, dass ich replaceAll()
in replace()
weil früher mit regex gearbeitet wurde, aber nach deinem code zu urteilen, musst du durch string ersetzt werden (mach dir keine sorgen, trotz verwirrendem name ersetzt er auch all Vorkommen).
Wenn Sie genau Stream API möchten, können Sie reduce()
:
Berücksichtigen Sie jedoch, dass eine solche Reduktion nur in seriellem (nicht parallelem) Stream richtig funktioniert , wobei die Combiner-Funktion nie aufgerufen wird (kann also irgendeine sein).
Diese Art von Problem ist für die Stream-API nicht gut geeignet. Die gegenwärtige Inkarnation von Streams ist hauptsächlich auf Aufgaben gerichtet, die parallel gemacht werden können. Vielleicht wird Unterstützung für diese Art von Operation in der Zukunft hinzugefügt (siehe Ссылка ).
Ein Streams-basierter Ansatz, den Sie vielleicht interessant finden, ist das Reduzieren von Funktionen statt der Zeichenfolge:
%Vor%Tags und Links java java-8 hashmap java-stream