1
나는 String
의 매우 많은 양을 반복 일부 반복자가변 변수없이 Iterator를 즉석에서 수정하는 방법은 무엇입니까?
val i: Iterator[String] = //..
있습니다. 따라서 메모리에있는 모든 내용을로드 할 수 없습니다. 소스 이터레이터의 각 요소 사이에 구분 기호 (예 : "separator"
)를 삽입하는 Iterator[String]
을 생성해야합니다.
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
}
이 작업을 수행 할 수있는 기능적인 방법이 있나요 : 예
["1", "2", "3"] --> ["1", "separator", "2", "separator", "3"]
["1", "2"] --> ["1", "separator", "2"]
["1"] --> ["1"]
[] --> ["1"]
나는 가변 변수 해결책을 찾았나요? 가변 변수가 없으면?
를 먼저 구분을 두는 경우에, 당신은'ITER flatMap { "분리":: _ : 무기 호} 1' 드롭 최초의 구분을 제거 할 수 있습니다. –
@KarlBielefeldt 좋은 생각입니다. 고마워요. – sepp2k
하지만 'Iterator'가 비어있는 경우 드롭이 작동하는 이유는 무엇입니까? –