Я бы посоветовал использовать метод скользящий для того, что вам нужно. Допустим, функция f
возвращает тот же тип, что и тип элемента итератора. Следующий метод sliding3Iter
предоставит скользящее окно из 3 элементов из предоставленного Итератора для функции f
в качестве аргументов:
def sliding3Iter[T](it: Iterator[T], f: (T, T, T) => T): Iterator[T] =
it.sliding(3).
collect{ case ls if ls.size == 3 => f(ls(0), ls(1), ls(2)) }
Например:
val f = (i: Int, j: Int, k: Int) => i + j + k
val it = (0 to 10).toIterator
sliding3Iter(it, f).toList
// res1: List[Int] = List(3, 6, 9, 12, 15, 18, 21, 24, 27)