У меня есть конструкция такого рода:Scala: ленивые вычисления на коллекции (Strategy Pattern)
if(condition1)
lengthyOperation1
else if(condition2)
lengthyOperation2
else if(condition3)
lengthyOperation3
...
else
lastLengthyOperation
Я хочу выразить примерно следующим образом:
lazy val seq = Seq(
condition1 -> lengthyOperation1,
condition2 -> lengthyOperation2,
condition3 -> lengthyOperation3,
...
true -> lastLengthyOperation
)
seq.find(_._1).match { case(_, v) => v }
Проблема в том, что оценка последней строки выполняет все длительные операции, когда доходит до «seq». Как это сделать, чтобы длительные операции выполнялись только при необходимости?
Примечание: условия не являются возможными модели паросочетания одного и того же выражения (то есть я не могу использовать один оператор соответствия для этого)
Edit: я должен использовать поток для этого?
Спасибо! Вы правы в том, что это должен был быть Seq. – mlg