如何转换一个整数的Scala流,以便我们拥有一个新的Stream,其中的元素是该元素和上一个元素的和。
例如,如果输入流为1、2、3、4 ...,则输出流为1、3、5、7。
也是第二个问题,如何使总和使用输出流中的前一个,以便输出为1,(2+(1)),(3+(2 + 1)),(4+(3 +(2 + 1)))。
最佳答案
只需使用自己的转换版本压缩流,然后对这两个元素求和即可。
val s1 = Stream.from(0) // 0, 1, 2, 3, ...
val s2 = Stream.from(1) // 1, 2, 3, 4, ...
val sumOfTwo = s1.zip(s2).map{ case (a,b) => a+b } // 1, 3, 5, 7, ...
要计算总和,只需使用扫描功能,它像折叠一样,但在每个步骤中返回元素。
val totalSum = s1.scan(0)((ctr, el) => ctr + el) // 0, 1, 3, 6, 10, ...
关于scala - 将Scala流转换为新流,该流是当前元素和上一个元素的总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24484794/