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