集合视图 vs withFilter

4

视图(views)和筛选器(withFilter)都解决了中间集合创建的问题。它们之间的区别是什么?

List("a", "b", "c").withFilter(_ == "b").withFilter(_ == "c").map(x => x)

vs

 List("a", "b", "c").view.filter(_ == "b").filter(_ == "c").map(x => x)
2个回答

2
第一个方式只是在调用`map`之前懒惰加载,而第二个方式则是完全懒惰加载(未被执行)。对于第二种方式,只有在调用`force`时才会最终执行——但是在您的示例中没有调用。因此,代码看起来像这样:
``` List("a", "b", "c").view.filter(_ == "b").filter(_ == "c").map(x => x).force ```
这与第一个方式等价。
有关Scala中的`withFilter`和`view`,请参见 此处此处

2
List("a", "b", "c").withFilter(_ == "b").withFilter(_ == "c").map(x => x)

结果:

 List[String] = List()

注意:结果不再是惰性的。
List("a", "b", "c").view.filter(_ == "b").filter(_ == "c").map(x => x)

结果:

scala.collection.SeqView[String,Seq[_]] = SeqViewFFM(...)

结果尚未被评估,它仍然是一个视图。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接