f(x) = x+2
p(y) = if(y>2) true else false
List(4,7,1,3,9).collect{ 案例 i 如果 p(f(i)) => f(i)}
这可行 - 但如果 f(x) 是一个繁重的计算函数,则意味着我被迫调用它两次。
如果我将 f(x) 的输出放入 val 中,然后输入到上面的 p(x) 中 - 代码将无法编译。
如何避免重复来电。
在这种情况下,使用单独的
map
和 filter
调用比 collect
: 更好
List(4,7,1,3,9).map(f).filter(p)
def f(x: Int) = {
println (s"f($x)")
x+2
}
def p (y: Int) = y > 2
LazyList(4,7,1,3,9).map(i => f(i)).filter(y => p(y)).toList