我有一个包含项目列表的大文件。
我想创建一批项目,用这批项目发出一个 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())
最好的方法是什么?
最佳答案
为了完整起见,这里是 Guava解决方案。
Iterators.partition(stream.iterator(), batchSize).forEachRemaining(this::process);
在问题中,集合可用,因此不需要流,它可以写成,
Iterables.partition(data, batchSize).forEach(this::process);
关于具有批处理功能的 Java 8 Stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30641383/