アイテムのリストを含む大きなファイルがあります。
アイテムのバッチを作成し、このバッチを使用して HTTP リクエストを作成したいと思います (すべてのアイテムは HTTP リクエストのパラメーターとして必要です)。ループを使用すると非常に簡単に実行できますfor
が、Java 8 愛好家として、Java 8 の Stream フレームワークを使用してこれを記述してみたいと思います (そして、遅延処理のメリットを享受したいと思います)。
例:
List<String> batch = new ArrayList<>(BATCH_SIZE);
for (int i = 0; i < data.size(); i++) {
batch.add(data.get(i));
if (batch.size() == BATCH_SIZE) process(batch);
}
if (batch.size() > 0) process(batch);
私は次のようなことをしたいと思っていますlazyFileStream.group(500).map(processBatch).collect(toList())
これを行う最善の方法は何でしょうか?
ベストアンサー1
完全を期すために、ここにグアバ解決。
Iterators.partition(stream.iterator(), batchSize).forEachRemaining(this::process);
質問ではコレクションが利用可能なのでストリームは必要なく、次のように記述できます。
Iterables.partition(data, batchSize).forEach(this::process);