>我有一个非常大的val s: List[Int] = //...
,一个函数f: Int => Boolean
和一个函数transform: Int => Int
。
问题
:我想创建另一个List[Int]
,以便s: List[Int]
的所有元素都e: Int
,以便f(e) = true
替换为transform(e)
。
我查看了cats-mtlFunctorEmpty
(坚持函数式编程风格(,但它似乎不适用于我的情况。也许一些cats
/scalaz
数据结构在这里很有用?还是其他方式?
s.map{ e => if(f(e)) transform(e) else e }
List(1, 2, 3).map(fn)
创建一个新列表,该列表可能并不完全需要,尤其是在输入很大的情况下。
替代解决方案是在视图List(1, 2, 3).view.map(...)
上映射而不创建新列表,并且仅在需要时"具体化"结果