使用内联函数收集

问题描述 投票:0回答:2

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) 中 - 代码将无法编译。

如何避免重复来电。

scala
2个回答
0
投票

在这种情况下,使用单独的

map
filter
调用比
collect
:

更好
List(4,7,1,3,9).map(f).filter(p)

0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.