在集合的映射中查找结果的惯用语大致如下:
list.view.map(f).find(p)
其中list
是一个List[A]
,f
是一个A => B
,p
是一个B => Boolean
。
在并行集合中是否可以使用view
?我问这个问题是因为我得到了一些非常奇怪的结果:
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0).
Type in expressions to have them evaluated.
Type :help for more information.
scala> val f : Int => Int = i => {println(i); i + 10}
f: Int => Int = <function1>
scala> val list = (1 to 10).toList
list: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> list.par.view.map(f).find(_ > 5)
1
res0: Option[Int] = Some(11)
scala> list.par.view.map(f).find(_ > 5)
res1: Option[Int] = None
.par
,对我来说结果如预期的一样(结果始终为Some(11)
)。它也可以在没有.view
的情况下使用.par
,只是两者同时使用就行不通了。 - Luigi Plingefind
这样的方法来说,这是有意义的。在ParSeqLike
中存在一个返回ParSeqView
的view
方法表明库设计者认为ParSeqView
是一个有用的东西。 - Luigi Plinge