оценка Рассмотрим следующий список преобразований:Scala преобразование потока и модель
List(1,2,3,4) map (_ + 10) filter (_ % 2 == 0) map (_ * 3)
Оценивается следующим образом:
List(1, 2, 3, 4) map (_ + 10) filter (_ % 2 == 0) map (_ * 3)
List(11, 12, 13, 14) filter (_ % 2 == 0) map (_ * 3)
List(12, 14) map (_ * 3)
List(36, 42)
Так есть три прохода и с каждым из них новый список структуры создано.
Итак, первый вопрос: can Stream
поможет избежать его, и если да - как? Могут ли все оценки выполняться за один проход и без создания дополнительных структур?
Не следующий поток модель оценки правильно:
Stream(1, ?) map (_ + 10) filter (_ % 2 == 0) map (_ * 3)
Stream(11, ?) filter (_ % 2 == 0) map (_ * 3)
// filter condition fail, evaluate the next element
Stream(2, ?) map (_ + 10) filter (_ % 2 == 0) map (_ * 3)
Stream(12, ?) filter (_ % 2 == 0) map (_ * 3)
Stream(12, ?) map (_ * 3)
Stream(36, ?)
// finish
Если это так, то есть такое же количество проходов и такое же количество новых Stream
структур, созданных как в случае List
. Если это не так, то второй вопрос: что такое Stream
оценочная модель в особенности этого типа цепочки трансформации?
Просто потому, что существует новый объект 'Stream', это не означает, что проход был сделан по всей коллекции. –