Eug*_*Loy 5 scala scala-collections
我正在寻找一种有效转换集合的内容和类型的方法.
例如,应用于mapa Set并获得结果List.
请注意,我想在将转换应用于源集合时构建结果集合(即,不创建中间集合,然后将其转换为所需类型).
到目前为止,我已经提出了这个问题(为了在增加每个元素的同时Set进行转换):Listset
val set = Set(1, 2, 3)
val cbf = new CanBuildFrom[Set[Int], Int, List[Int]] {
def apply(from: Set[Int]): Builder[Int, List[Int]] = List.newBuilder[Int]
def apply(): Builder[Int, List[Int]] = List.newBuilder[Int]
}
val list: List[Int] = set.map(_ + 1)(cbf)
Run Code Online (Sandbox Code Playgroud)
...但我觉得应该有更简短和优雅的方法来做到这一点(CanBuildFrom每次我需要时都不需要手动执行).
任何想法如何做到这一点?
这正是scala.collection.breakOut是,稍后即联想到了CanBuildFrom你需要的,如果你告诉它所需的新的集合类型:
import scala.collection.breakOut
val xs: List[Int] = Set(1, 2, 3).map(_ + 1)(breakOut)
Run Code Online (Sandbox Code Playgroud)
这只会遍历集合一次.有关详细信息,请参阅此答案.