将流分成两个流



定义分隔符;函数将一个流分成两个流。第一个列表应该包含奇数索引的元素,第二个列表包含偶数索引的元素。示例:split(Stream(5, 6, 3, 2, 1)) -> Stream(5, 3, 1) and Stream(6, 2)

我的尝试:

def split(originalElements: Stream[Any]): (Stream[Any], Stream[Any]) = {
var oddList: Stream[Any] = Stream();
var evenList: Stream[Any] = Stream();
for (i <- 0 until originalElements.length) {
if (i % 2 == 0) {
oddList = oddList :+ originalElements(i)
} else {
evenList = evenList :+ originalElements(i)
}
}
(oddList, evenList)
}
println(split(Stream(5, 6, 3, 2, 1)))

我得到这个输出->(Stream(5, <not computed>),Stream(6, <not computed>))

我在流函数中感到困惑,有人能帮助我理解这段代码中有什么问题,为什么我没有得到正确的输出?提前感谢!

您可以尝试使用分区函数或自己用filterfilterNot函数重新实现它。流不是一个列表,你不应该使用length。流可能是无限的

val s = Stream(5, 6, 3, 2, 1)
val (oddStream, evenStream) = {
val (odd, even) = s.zipWithIndex.partition {
case (_, i) => i % 2 == 0
}
(odd.map(_._1), even.map(_._1))
}

最新更新