Скажем, у меня есть следующее определение функции:Составление итераторы
def print(input:Iterator[String]) : Iterator[String] = {
Iterator.continually {
val item = input.next
item + item
}
}
данный вход
List("1", "2", "3").iterator
Я хочу, чтобы выход равным
List("11", "22", "33").iterator
Проблема заключается в том, что, когда Я использую Iterator.continually
, я вынужден перебирать список, используя takeWhile
. Я хотел бы иметь возможность использовать любую итераторную функцию, которая существует (fold, filter, etc ...), не получая исключение «next on empty iterator».
Вы можете сделать это в F #, используя seq и yield. Я надеялся, что Iterator.continually
будет таким же надежным.
F # пример:
seq {
for i in input |> yield i + i
}
P.S. Я понимаю, что могу просто составить кучу функций, а затем передать их функции Iterator, но я пытаюсь создать итераторы таким образом, чтобы я мог в F #.
Вы уже знаете о [Streams] (http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.Stream)? – DaoWen
Вопрос мне не совсем понятен. Вы могли бы просто называть 'map' на' input' для выполнения этого ('input.map (x => x + x)'), но, похоже, это не решит ваш вариант использования, просто ваш пример. Однако я понятия не имею, каков ваш вариант использования. –
Я не знаю о потоках, они лучше для такого рода проблем? –