Java/Kotlin-如果源代码中为空,则Akka流源代码.reduce不起作用

q8l4jmvw  于 2022-11-06  发布在  Java
关注(0)|答案(1)|浏览(159)

在Akka Streams Doku中,我们给出了一个Scala的例子,其中的一个列表包含一个空值。这个列表被转换成一个Source,并像例子中那样被简化。
链接到Scala的推文示例:https://doc.akka.io/docs/akka/current/stream/stream-quickstart.html#first-steps
这是我翻译成Kotlin

val system = ActorSystem.create("reactive-tweets")

val ints: Source<Int, NotUsed> = Source.from(listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, null))
ints
  .filter {
    it != null
  }
  .map {
    it * 2
  }
  .reduce { arg1, arg2 ->
    arg1 + arg2
  }
  .runWith(Sink.foreach { a -> println("sum: " + a)}, system)

我也尝试了Source<Int?, NotUsed>,没有改变任何东西。我想知道在后端是否发生了错误或发生了什么,流没有到达打印语句。

6vl6ewon

6vl6ewon1#

Akka Streams不允许null元素。这在www.example.com中有说明https://doc.akka.io/docs/akka/current/stream/stream-flows-and-basics.html#illegal-stream-elements
在这个例子中,你看到的不是流元素null,而是使用::操作符构造列表的Nil。在Scala中,Nil是一个包含空列表的常量,::在列表前面添加了一个元素。在这个例子中,它们被用来构造一个链表,然后被转换为Source

相关问题