使用cyclops-react 1.0.0-RC3,我试图在batops-react streams user guide上重新创建示例并进行批处理。我发现ReactiveSeq
中缺少某些方法,包括batchBySize
和windowByTime
。
我确实在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
我应该期望在batchBySize
上找到windowByTime
和ReactiveSeq
,还是以适当的方式使用StreamUtils
?
答案 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();