scala - 合并集合操作

标签 scala collections functional-programming scala-collections

看下面的代码:

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 来使用它们,当您想要具体化它们时,您可以通过 .forcetoList/.toSeq:

val result = a
              .view
              .filter(_ >= 3)
              .map(_ * 9)
              .drop(1)
              .take(2)
              .force

关于scala - 合并集合操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39937379/

相关文章:

python - 如何将 collections.Counter 对象写入 python 中的文件,然后从文件中重新加载它并将其用作计数器对象

java - 有序持久缓存

c# - 我能有一本按日期排序的字典吗

回收和分配函数 (`split<-` )

scala - 在没有 Spark 的 Scala 中创建 Parquet 文件

scala - 为什么是 "avoid method overloading"?

functional-programming - 对 Substitution/`ap` 类型签名和不同实现的理解困惑(函数式编程)

.net - 如何在函数的元组中定义类型

scala - 在 Scala 2.8 中,为什么 Iterator 有 contains 方法而 Iterable 没有?

python - 从任务中调用 Java/Scala 函数