Kotlin 语言中的上游/下游流是什么

What are upstream/downstream flows in the Kotlin language

提问人:Ummer Siddique 提问时间:7/27/2023 更新时间:7/27/2023 访问量:109

问:

在流文档中,他们提到了上游和下游流:

可以使用运算符转换流,就像使用集合和序列一样。中间运算符应用于上游流并返回下游流。

给定代码(来自同一来源):

(1..3).asFlow() // a flow of requests
        .map { request -> performRequest(request) }
        .collect { response -> println(response) 

上游和下游是否意味着输入和输出(返回值)?例如,当编程语言开始执行部件时,值 是上游流,返回值是下游流?.map(1..3).asFlow().map {...}

kotlin 协程术语 kotlin-flow

评论


答:

-3赞 Ummer Siddique 7/27/2023 #1

Kotlin 的官方定义:

interface Flow<out T>

按顺序发出值并正常完成或异常完成的异步数据流。

流上的中间运算符(如 map、filter、take、zip 等)是应用于上游流或流的函数,并返回下游流,可以应用更多运算符。中间操作不执行流中的任何代码,也不会挂起函数本身。他们只为将来的执行设置了一系列操作,然后迅速返回。这称为冷流特性。

流上的终端运算符要么挂起 collect、single、reduce、toList 等函数,要么在给定范围内开始收集流的 launchIn 运算符。它们应用于上游流并触发所有操作的执行。流的执行也称为收集流,并且始终以挂起方式执行,而不会实际阻塞。终端操作员正常或例外地完成取决于上游所有流操作的成功或失败执行。最基本的终端算子是 collect,例如:

try {
    flow.collect { value ->
        println("Received $value")
    }
} catch (e: Exception) {
    println("The flow has thrown an exception: $e")
}

评论

0赞 Tenfour04 7/27/2023
这是错误的。链中可以有两个以上的运算符,在这种情况下,某些上游流将是中间流,而不是数据源。此外,我们不会在下游流中使用数据。数据在终端操作中使用,不会产生其他流。上游和下游是相对的术语。流可以是上游的,也可以是下游的,这取决于你所说的链中的其他流。
0赞 Ummer Siddique 7/27/2023
@Tenfour04 感谢您的解释。
0赞 Community 8/2/2023
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。