Я думаю, что это работает очень хорошо, когда речь идет о рекурсии. В противном случае я предпочитаю Iterator, поскольку в Stream есть определенные подводные камни, большое количество данных и сохраняющиеся ссылки на начало потока.

ел бы создатьIterator он получает свой следующий элемент путем (многократной) оценки выражения, и я хочу, чтобы выражение могло возвращать определенное значение для его завершения.

Единственное, что я нашел, этоIterator.continually (), который кажется бесконечным. Важно, чтобы выражение не оценивалось доnext() называется наIterator.

Есть ли способ получить такое поведение?

например:

def getNext = {
  // some complicated code
  val next = ... // either a STOP value or a real value to be returned by the iterator
} 

val myIter = Iterator.continually(getNext) // want this to stop at some point

Ответы на вопрос(2)

Ваш ответ на вопрос