【问题标题】:Conversion of breakOut - use iterator or view?breakOut 的转换 - 使用迭代器还是视图?
【发布时间】:2021-10-13 20:16:41
【问题描述】:

Scala 2.13 migration guide 包含有关如何移植collection.breakOut 的说明:

collection.breakOut 不再存在,请改用.view.to(Collection)

概览表中有以下几段:

Description Old Code New Code Automatic Migration Rule
collection.breakOut
no longer exists
val xs: List[Int]
= ys.map(f)
(collection.breakOut)
val xs =
ys.iterator.map(f).to(List)
Collection213Upgrade

scala-collection-migration 重写规则使用.iterator。两者有什么区别?有理由偏爱其中一个吗?

【问题讨论】:

    标签: scala collections scala-2.13


    【解决方案1】:

    这样使用并没有真正的区别。

    View 可以重复使用,而Iterator 在使用一次后必须丢弃。

    val list = List(1,2,3,4,5)
    
    val view = list.view
    val viewPlus1 = view.map(_ + 1).toList
    view.foreach(println) // works as expected
    
    val it = list.iterator
    val itPlus1 = it.map(_ + 1).toList
    it.foreach(println) // undefined behavior
    

    View[A] 的最简单形式是函数 () => Iterator[A] 的包装,因此它的所有方法都可以创建一个新的 Iterator[A] 并委托给该迭代器上的适当方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-27
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 2010-12-23
      • 2014-04-27
      • 2015-04-01
      • 2016-06-20
      相关资源
      最近更新 更多