У меня есть итератор строк из очень большого файла, который нужно поместить в группы по мере продвижения. Я знаю, где заканчивается каждая группа, потому что в последней строке каждой группы есть значение часового. Итак, в основном я хочу написать функцию, которая принимает итератор и значение часового и возвращает итератор групп, каждая из которых оканчивается значением часового. Что-то вроде:
scala> groups("abc.defg.hi.jklmn.".iterator, '.')
res1: Iterator[Seq[Char]] = non-empty iterator
scala> groups("abc.defg.hi.jklmn.".iterator, '.').toList
res19: List[Seq[Char]] = List(List(a, b, c, .), List(d, e, f, g, .), List(h, i, .), List(j, k, l, m, n, .))
Обратите внимание, что я хочу, чтобы элементы стража были включены в конец каждой из групп. Вот мое текущее решение:
def groups[T](iter: Iterator[T], sentinel: T) = new Iterator[Seq[T]] {
def hasNext = iter.hasNext
def next = iter.takeWhile(_ != sentinel).toList ++ List(sentinel)
}
Я думаю, что это будет работать, и я думаю, что это нормально, но необходимость повторного добавления стража каждый раз дает мне запах кода. Есть ли лучший способ сделать это?