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

Java 如何在Akka runWith()中创建方法并使用此方法,java,akka,akka-stream,Java,Akka,Akka Stream,Akka流代码: Source.range(1, 100).map(i -> { return Stream.of(i*4).toList(); }).runWith(Sink.foreach(a ->System.out.println(a)), materializer); 我想创建一个方法,比如说printList(),并移动runWithcode(Sink.foreach(a->System.out.println(a))),所以它应该像这样runWit

Akka流代码:

Source.range(1, 100).map(i -> {
        return Stream.of(i*4).toList();
}).runWith(Sink.foreach(a ->System.out.println(a)), materializer);  
我想创建一个方法,比如说
printList()
,并移动
runWith
code(
Sink.foreach(a->System.out.println(a))
),所以它应该像这样
runWith(printList(),materializer)
printList()
方法必须返回一个
Sink
,或者一个可运行的图形/Sink形状。我不明白您在这里到底想做什么,所以我将分析一些让我困惑的事情,也许这将帮助您编写出更好的代码:

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

  • 下一步,
    map(i->Stream.of(i*4).toList())
    就是我开始困惑的地方。这将返回一个只包含一个元素的
    列表
    :i x 4(依次为4、8、12、16等)。同样的效果,不需要列表,只需使用
    map(i->i*4)
    。。。这将返回上游源的每个元素乘以4

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

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

    猜猜你的目的,我想你会想要这样的东西:

    Source.range(1, 100)
      .map(i -> i * 4)
      .runWith(
        Sink.forEach(a -> System.out.println(a)), 
        materializer);
    
    这会打印出来

    4
    8
    12
    16
    20
     ...
    400
    
    printList()
    方法必须返回一个
    Sink
    ,或一个可运行的图形/Sink形状。我不明白您在这里到底想做什么,所以我将分析一些让我困惑的事情,也许这将帮助您编写出更好的代码:

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

  • 下一步,
    map(i->Stream.of(i*4).toList())
    就是我开始困惑的地方。这将返回一个只包含一个元素的
    列表
    :i x 4(依次为4、8、12、16等)。同样的效果,不需要列表,只需使用
    map(i->i*4)
    。。。这将返回上游源的每个元素乘以4

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

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

    猜猜你的目的,我想你会想要这样的东西:

    Source.range(1, 100)
      .map(i -> i * 4)
      .runWith(
        Sink.forEach(a -> System.out.println(a)), 
        materializer);
    
    这会打印出来

    4
    8
    12
    16
    20
     ...
    400
    

    您要打印哪个列表?您还想放置printList()而不是System.out.println(a)?我想要一个类似printList()的方法{Sink.foreach(a->System.out.println(a))}和.runWith(printList(),materializer);。这个printList()将打印所有列表元素,例如,4、8、12等等,您想打印哪个列表?您还想放置printList()而不是System.out.println(a)?我想要一个类似printList()的方法{Sink.foreach(a->System.out.println(a))}和.runWith(printList(),materializer);。这个printList()将打印所有列表元素,如,4,8,12等等。实际上,我是Akka,Akka Stream的新手,请提供完整的代码,正如您在上面解释的那样。谢谢,事实上,我是新来阿克卡,阿克卡流,请提供完整的代码,如你在上面解释。谢谢