Вы полагаетесь на takeWhile
, который сначала захватывает следующую строку, а затем проверяет, есть ли другая строка.Так работает в итераторе по умолчанию.И для любого конкретного итератора, я ожидаю, что, если он когда-либо будет работать, он всегда должен работать.
Если он когда-нибудь потерпит неудачу, вам нужно будет кэшировать результат.Вы можете создать свой собственный итератор, который делает это, или, что проще (если это не срочно критичный к производительности код):
lines.sliding(2).map(_.head)
Проверьте это следующим образом:
List(1,2,3,4,5).iterator.sliding(2).map(_.head).toList
Вы не должны полагаться на takeWhile
или любой другой метод, ведущий себя каким-либо конкретным образом;если sliding
не сломан, он будет иметь вышеуказанное поведение.