我有一个包含项目列表的大文件。
我想创建一批项目,将此批次作为参数在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())
的事情。
最佳方法是什么?
flatMap
的反函数(+ 一个额外的 flatMap 来再次折叠流)?我不认为标准库中存在这样一个方便的方法。你要么得找到一个第三方库,要么就得根据 spliterator 和/或发出流的收集器编写自己的库。 - the8472Stream.generate
与reader::readLine
和limit
结合起来,但问题是流与异常不太兼容。此外,这也很可能不容易并行化。我认为for
循环仍然是最好的选择。 - tobias_k