将批量操作作为中间流操作运行

时间:2018-05-25 15:10:27

标签: java java-stream bulk

我有一个未定义长度的java流。现在我需要从数据库加载一些元数据并将其分配给流数据。

我不能:

  • 立即将流中的所有数据加载到我的RAM中,填充元数据,然后启动一个新流,因为这可能会占用很多RAM。
  • 单独加载每个元素的元数据,因为这会使我的数据库泛滥太多请求。

因此我认为我可以在数据库的分区中加载元数据。

我需要一个像这样的方法:

<T> Stream<List<T>> partition(Stream<T> stream, int partitionSize)

所以我可以像这样使用它

partition(dataSource.stream(), 1000)
    .map(metadataSource::populate)
    .flatMap(List::stream)
    .forEach(this::doSomething);

我已经找到Guava's Iteralbes#partition,但这会迫使我将流转换为可迭代的,对其进行分区并再次将其转换为流。是否为流分区内置了一些内容,还是有一种简单的方法可以自己实现它?

1 个答案:

答案 0 :(得分:2)

我还没有找到现有的方法,所以我自己实现了一个:

{{1}}