集合视图与withFilter

时间:2018-11-12 16:23:34

标签: scala

视图和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 个答案:

答案 0 :(得分:1)

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(...)

结果尚未评估,仍然是视图。

答案 1 :(得分:1)

第一个是惰性的,直到您调用map为止,而第二个则是惰性的(未执行)。对于第二个,它将在决定调用force时最终执行-您在示例中尚未完成此操作。因此,它看起来像:

List("a", "b", "c").view.filter(_ == "b").filter(_ == "c").map(x => x).force

这等同于第一个。

有关Scala中的withFilterview,请参见herehere