具有批处理功能的 Java 8 Stream

标签 java java-8 batch-processing java-stream

我有一个包含项目列表的大文件。

我想创建一批项目,用这批项目发出一个 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/

相关文章:

java - java vs python 中获取十六进制字符串表示的二进制数据

java - Firebase recyclerview 在 Release模式下不显示任何值,但在 Debug模式下完美运行

java - 如何通过类类型委托(delegate)构造函数的实例化?

android - 调试 OperationApplicationException 插入失败

java - 使用 python 的 Android 应用程序

java - 将具有返回语句的Java普通for循环转换为Java8 IntStream

java-8 - Weblogic 12.2.1 + Java 8 + Spring Data JPA + Hibernate 5.x部署冲突

windows - 试图通过批处理文件阻止 RuntimeBroker.exe 使用过多的 CPU

java - 如何从批处理程序中调用 servlet?

java - 如何解决不抽象和不重写抽象方法onTabReselected