如何创建方法并在Akka runWith()中使用此方法

问题描述 投票:0回答:1

Akka流代码:

Source.range(1, 100).map(i -> {
        return Stream.of(i*4).toList();
}).runWith(Sink.foreach(a ->System.out.println(a)), materializer);  

我想创建一个方法,说printList()并移动runWith代码(Sink.foreach(a ->System.out.println(a))),所以应该像这样runWith(printList(), materializer)

java akka akka-stream
1个回答
2
投票

printList()方法将必须返回Sink或可运行的图形/接收器形状。我不明白您要在这里做什么,所以我将分解一些令我困惑的事情,也许这将有助于您制定出更好的代码:

  1. Source.range(1, 100)是一个很好的开始,将从1到100一次输出一个整数。

  2. 下一步,map(i -> Stream.of(i * 4).toList())是我开始困惑的地方。这将返回一个List<Integer>,其元素恰好为[[one:i x 4(所以依次为4、8、12、16等)。没有[List]的相同效果可以简单地通过map(i -> i * 4)来实现...这将返回上游Source的每个元素乘以四。

  3. 现在,按您所拥有的代码显示runWith(Sink.foreach(a -> System.out.println(a)), mat) ...,它将收到其中包含一个元素的列表100次。

如果要获取100个整数元素的Source并将它们放入列表中,则可以使用Sink运算符来完全做到这一点:Sink.seq()。但是,您必须确保Source实际上是有限的,否则您将永远无法到达此Sink运算符创建的集合的末尾。

© www.soinside.com 2019 - 2024. All rights reserved.