Mein genaues Szenario besteht darin, Daten stapelweise in die Datenbank einzufügen, also möchte ich DOM-Objekte dann alle 1000 akkumulieren und sie leeren.
Ich habe es implementiert, indem ich Code in den Akkumulator gesetzt habe, um Fülle zu erkennen, dann flush, aber das scheint falsch zu sein - die Flush-Kontrolle sollte vom Aufrufer kommen.
Ich könnte den Stream in eine Liste umwandeln und dann subList auf eine iterative Weise verwenden, aber auch das scheint klobig.
Gibt es eine nette Möglichkeit, alle n Elemente zu bearbeiten und dann mit dem Stream fortzufahren, während der Stream nur einmal verarbeitet wird?
Eleganz liegt im Auge des Betrachters. Wenn es Ihnen nichts ausmacht, eine Stateful-Funktion in groupingBy
zu verwenden, können Sie dies tun:
Dadurch werden keine Leistungs- oder Speicherbenutzungspunkte über Ihrer ursprünglichen Lösung erzielt, da es immer noch den gesamten Stream materialisiert, bevor Sie etwas tun.
Wenn Sie die Liste nicht materialisieren möchten, hilft Ihnen die Stream-API nicht. Sie müssen den Iterator oder Spliterator des Streams abrufen und so etwas tun:
%Vor%Tags und Links java java-8 chunking java-stream