加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 视图和流之间有什么区别?

发布时间:2020-12-16 09:40:14 所属栏目:安全 来源:网络整理
导读:在Scala 2.8集合框架中,view和toStream有什么区别? 解决方法 在视图中,每次访问时重新计算元素。流中的元素在被评估时被保留。 例如: val doubled = List(1,2,3,4,5,6,7,8,9,10).view.map(_*2)println(doubled.mkString(" "))println(doubled.mkString("
在Scala 2.8集合框架中,view和toStream有什么区别?

解决方法

在视图中,每次访问时重新计算元素。流中的元素在被评估时被保留。

例如:

val doubled = List(1,2,3,4,5,6,7,8,9,10).view.map(_*2)
println(doubled.mkString(" "))
println(doubled.mkString(" "))

将重新评估每个元素的地图两次。一次为第一个println,再次为第二个。相反

val doubled = List(1,10).toStream.map(_*2)
println(doubled.mkString(" "))
println(doubled.mkString(" "))

只会使元素增加一倍。

视图就像一个创建集合的食谱。当您要求视图的元素时,每次都会执行食谱。

一条流就像一大堆干擦卡。该人知道如何计算集合的后续元素。你可以询问他收集的下一个元素,并给你一张写有元素的卡片,一张从卡片绑到手指上的弦(帮助他记住)。此外,在他给你一张卡片之前,他用手指将他的第一根绳子扣在新卡上。

如果您持有第一张卡(即保留对流的头部的引用),则当您要求下一个元素时,最终可能会用尽卡片(即内存),但如果您不需要返回到第一个元素,你可以剪切字符串,并把不需要的卡回到那个家伙,他可以重复使用(他们是干擦除后)。这是一个流如何表现无限序列,而不会耗尽内存。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读