AtomicInteger
wurde bereits erwähnt. Mutable Double
s können mit emuliert werden AtomicReference<Double>
. Die bereits erwähnten Warnungen gelten und es ist ein schlechter Stil, aber manchmal haben Sie Code wie diesen
double sum=0
for (Data data:someListGenerator())
sum+=data.getValue()
und möchten es im funktionalen Java 8-Stil umgestalten. Wenn der Code dieses Muster folgt , sondern fügt einen erheblichen Aufwand , um es, die vernünftigste Umwandlung könnte sein
AtomicReference<Double> sumref=new AtomicReference<>(0d);
someStreamGenerator().forEach(data->
sumref.set(sumref.get().doubleValue()+data.getValue()));
double sum=sumref.get().doubleValue();
Das ist natürlich zumindest fragwürdiger Stil. Aber ich befand mich mehr als einmal in einer Situation mit einer verdrehten Schleife über einem ResultSet
Computer, in der teilweise drei verschiedene Informationen daraus kumuliert wurden. Dies macht es wirklich schwierig, den Code in den richtigen Funktionsstil zu konvertieren. Das Konvertieren der kumulierten Teile nach dem obigen Muster schien mir ein vernünftiger Kompromiss zwischen sauberem Code und stark vereinfachtem Refactoring zu sein.