cyclops-react:ReactiveSeq上没有批处理函数?

时间:2016-05-23 16:47:42

标签: java java-8 reactive-streams cyclops-react

使用cyclops-react 1.0.0-RC3,我试图在batops-react streams user guide上重新创建示例并进行批处理。我发现ReactiveSeq中缺少某些方法,包括batchBySizewindowByTime

我确实在StreamUtils找到了这些方法,并且它们按预期工作,但看起来并不像用户指南中的示例那样光滑......

来自用户指南的

...

// Example 19. Batch by size example
ReactiveSeq.of(1,2,3,4,5, 6)
  .map(n-> n==6? sleep(1) : n)
  .batchBySize(4) // this function seems to be missing...
  .toList()

我能做些什么......

import com.aol.cyclops.control.ReactiveSeq;
// ...
StreamUtils.batchBySize(
    ReactiveSeq.of(1, 2, 3, 4, 5, 6)
        .map(n -> TestUtils.mayBeSlow(n)),
    4)
    .collect(Collectors.toList());

您可以在testBatchingSlidingWindowing方法测试类StreamsTest.java

中的工作JUnit中查看我的代码

我应该期望在batchBySize上找到windowByTimeReactiveSeq,还是以适当的方式使用StreamUtils

1 个答案:

答案 0 :(得分:3)

使用分组代替。它适用于所有cyclops-react Traversable类型(例如ListX,SetX,QueueX,DequeX,ReactiveSeq等)。所以你的例子将成为

ReactiveSeq.of(1,2,3,4,5, 6)
           .map(n-> n==6? sleep(1) : n)
           .grouped(4) 
           .toList()

groupsXXX运算符就像batchByXXX和windowByXXX一样,通过扩展的Collection类型提供对分组数据的访问,该类型本身具有所有可遍历的&可折叠的操作员。

E.g。例如加倍组/批处理列表的成员

 ReactiveSeq.of(1,2,3,4,5, 6)
           .map(n-> n==6? sleep(1) : n)
           .grouped(4) 
           .map(list-> list.map(i->i*2))
           .toList() 

您还可以使用groupsT返回ListTransformer。 ListTransformers允许您操作嵌套结构,就好像它们是unnested一样。

E.g。例如加倍使用groupsT

的组/批处理列表的成员
ReactiveSeq.of(1,2,3,4,5, 6)
           .map(n-> n==6? sleep(1) : n)
           .groupedT(4) 
           .map(i->i*2);

将ListTransformer转换回列表流

ListTSeq<Integer> listT = ReactiveSeq.of(1,2,3,4,5, 6)
                                     .map(n-> n==6? sleep(1) : n)
                                     .groupedT(4);

ReactiveSeq<ListX<Integer>> nested = listT.toNestedListX()
                                          .stream();