В Scala есть класс Stream, который очень похож на итератор. В разделе Разница между Iterator и Stream в Scala? дает некоторое представление о сходствах и различиях между ними.
Увидеть, как использовать поток, довольно просто, но у меня нет очень многих обычных вариантов использования, где я бы использовал поток вместо других артефактов.
Идеи, которые у меня есть прямо сейчас:
- Если вам нужно использовать бесконечную серию. Но это не похоже на обычный случай использования, поэтому он не соответствует моим критериям. (Пожалуйста, поправьте меня, если это распространено, и у меня просто слепое место).
- Если у вас есть серия данных, в которых каждый элемент должен быть вычислен, но вы можете повторно использовать его несколько раз. Это слабо, потому что я могу просто загрузить его в список, который концептуально проще отслеживать для большого подмножества популяции разработчиков.
- Возможно, существует большой набор данных или дорогостоящая серия, и существует высокая вероятность того, что нужные вам элементы не потребуют посещения всех элементов. Но в этом случае Итератор будет хорошим совпадением, если вам не нужно выполнять несколько поисков, и в этом случае вы могли бы использовать список, даже если он будет немного менее эффективным.
- Существует сложная серия данных, которые необходимо повторно использовать. Здесь можно использовать список. Хотя в этом случае оба случая были бы одинаково сложны в использовании, и Stream был бы более подходящим, поскольку не все элементы должны быть загружены. Но опять же не так часто... или это?
Так что я пропустил какие-то большие возможности? Или это предпочтение разработчика по большей части?
Спасибо