【发布时间】:2017-11-21 22:53:55
【问题描述】:
我有一些迭代器
val i: Iterator[String] = //..
它正在迭代大量的Strings。所以不可能将所有内容加载到内存中。我需要生成Iterator[String],它在源迭代器的每个元素之间插入分隔符(比如"separator")。例子
["1", "2", "3"] --> ["1", "separator", "2", "separator", "3"]
["1", "2"] --> ["1", "separator", "2"]
["1"] --> ["1"]
[] --> ["1"]
我找到了一个可变变量的解决方案:
class SeparatedIterator(i: Iterator[String]) extends Iterator[String] {
private var pointToElement = false
override def hasNext: Boolean =
if (pointToElement && i.hasNext) true
else i.hasNext
override def next(): String =
if(pointToElement && i.hasNext) {
pointToElement = false
"separator"
}
else if (i.hasNext) {
pointToElement = true
i.next()
} else throw new NoSuchElementException
}
有没有一种功能性的方法可以做到这一点?没有可变变量?
【问题讨论】: