1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
fun main() {
var flow1 = (1..10).asFlow().onEach { delay(300L) }
var flow2 = (11..20).asFlow().onEach { delay(1000L) }

runBlocking {
flow1.combine(flow2) { n1, n2 ->
println("combine $n1:$n2")
}.collect()
flow1.zip(flow2) { n1, n2 ->
println("zip $n1:$n2")
}.collect()
merge(flow1, flow2).onEach { it ->
println("merge $it")
}.collect()
}
}

结果如下:
//在第一轮时,combine会等待两个流中都传入值才会继续进行,而后进行只需判断是否有值即可。
combine 3:11
combine 4:11
combine 5:11
combine 6:11
combine 6:12
combine 7:12
combine 8:12
combine 9:12
combine 9:13
combine 10:13
combine 10:14
combine 10:15
combine 10:16
combine 10:17
combine 10:18
combine 10:19
combine 10:20
zip 1:11
zip 2:12
zip 3:13
zip 4:14
zip 5:15
zip 6:16
zip 7:17
zip 8:18
zip 9:19
zip 10:20
merge 1
merge 2
merge 3
merge 11
merge 4
merge 5
merge 6
merge 12
merge 7
merge 8
merge 9
merge 13
merge 10
merge 14
merge 15
merge 16
merge 17
merge 18
merge 19
merge 20