看下面的代码:
val a = List(1,2,3,4,5)
a.filter(_ >= 3).map(_ * 9).drop(1).take(2)
我的理解是,它为每个操作遍历列表一次,生成类似于以下的代码:
for(i <- a) {
// filter
}
for (i <- afiltered) {
// map
}
for (i <- afilteredandmapped) {
// drop
}
..etc
有没有办法组合这些操作,使链式操作只在列表中迭代一次?生成如下:
for (i <- a) {
// filter
// map
// drop
// take
}
最佳答案
Scala 2.8 集合引入了 Views 的概念,这是严格集合的惰性对应物。它允许您在对集合应用多个转换时避免集合的中间分配。
您可以通过调用集合上的 .view
来使用它们,当您想要具体化它们时,您可以通过 .force
或 toList
/.toSeq
:
val result = a
.view
.filter(_ >= 3)
.map(_ * 9)
.drop(1)
.take(2)
.force
关于scala - 合并集合操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39937379/