首先要了解sequence可以做什么?怎么做?有什么好处?
简单的来说sequence就是一个创建虚拟的线程(kotlin中的协程)把所有相关操作单独完成
运行结果:3>>1>>4>>2>>1>>4>>2>>1>>4>>2>>1>>4>>2>>1>>4>>2>>1>>4>>2>>1>>4>>2>>1>>4>>2>>1>>4>>2>>1>>4>>2>>
这里估计又有点奇怪了
为什么第一会是3,正常的应该是1,其实这个是由于sequence的一个惰性加载,只有在用到时才会去加载,在8到15行我们只是在定义一个sequence,这个时候就像我们创建了一下下面这样的变量,并却还不会去初始化
直到第19行时,我们需要遍历sequence,此时代码才会初始化sequence,这也就是为什么不会先打印1
为什么后面是1 4 2循环,当sequence去加载,此时便会去执行8到15行的代码,依次执行所以打印1是正常的,
那么为什么第二个是4呢?
其实这里我们就要讲一下 yield()这个函数了,这个函数主要主要就是把虚拟线程暂停,然后把值抛给调用者(这里也就是seq.forEach()),等调用者执行完成再执行下面的代码,这也就是为什么 4 会在 2 前面。
补充:
这个两个是对等的 也就是我们需要一次性给多个值也可以抛一个list给调用者