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

j7dteeu8  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(157)

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)

b4wnujal

b4wnujal1#

printList()方法必须返回一个Sink,或者一个可运行的graph / sink形状。我不明白你在这里到底想做什么,所以我会分解一些让我困惑的事情,也许这会帮助你写出更好的代码:

  1. 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操作符创建的集合的结尾。
    猜猜你的目的,我猜你想要的是:
Source.range(1, 100)
  .map(i -> i * 4)
  .runWith(
    Sink.forEach(a -> System.out.println(a)), 
    materializer);

这将打印

4
8
12
16
20
 ...
400

相关问题