按条件替换List中的元素

Replace elements in List by condition

我有一个相当大的 val s: List[Int] = //...、一个函数 f: Int => Boolean 和一个函数 transform: Int => Int

问题:我想创建另一个List[Int],这样e: Int的所有元素s: List[Int] 这样 f(e) = true 被替换为 transform(e)

我查看了 cats-mtl FunctorEmpty(坚持函数式编程风格),但它似乎对我的情况不起作用。也许一些 cats/scalaz 数据结构在这里很有用?或者其他方式?

s.map{ e => if(f(e)) transform(e) else e }

List(1, 2, 3).map(fn) 创建一个新列表,该列表可能并不完全符合您的需要,尤其是在输入较大的情况下。

替代解决方案是在视图 List(1, 2, 3).view.map(...) 上映射而不创建新列表,并且只有 "materialize" 在您需要时得到结果