Java 8 ストリームとバッチ処理 質問する

Java 8 ストリームとバッチ処理 質問する

アイテムのリストを含む大きなファイルがあります。

アイテムのバッチを作成し、このバッチを使用して 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);

おすすめ記事