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)
1条答案
按热度按时间b4wnujal1#
printList()
方法必须返回一个Sink
,或者一个可运行的graph / sink形状。我不明白你在这里到底想做什么,所以我会分解一些让我困惑的事情,也许这会帮助你写出更好的代码:Source.range(1, 100)
是一个很好的开始,它将一次输出一个从1到100的整数。1.下一步,
map(i -> Stream.of(i * 4).toList())
就是我困惑的地方,它将返回一个List<Integer>
,其中只有 * 一个 * 元素:i x 4(因此依次为4、8、12、16等)。在没有List的情况下,可以简单地使用map(i -> i * 4)
来实现相同的效果......这将返回上游Source的每个元素乘以4。1.现在,
runWith(Sink.foreach(a -> System.out.println(a)), mat)
......在您所拥有的代码中,它将接收一个包含一个元素的List,100次。如果你想把一个100个Integer元素的Source放入一个List中,那么这里有一个Sink操作符可以做到这一点:
Sink.seq()
。然而,你必须确保Source实际上是有限的,否则你永远不会到达这个Sink操作符创建的集合的结尾。猜猜你的目的,我猜你想要的是:
这将打印