首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >List.view和LazyList有什么区别?

List.view和LazyList有什么区别?
EN

Stack Overflow用户
提问于 2020-01-04 02:32:32
回答 3查看 1.1K关注 0票数 8

我对Scala很陌生,我刚刚了解到LazyList是为取代Stream而创建的,同时他们将.view方法添加到所有集合中。

所以,我想知道为什么LazyList会添加到Scala集合库中,而我们什么时候可以执行List.view呢?

我只是看了一下Scaladoc,似乎唯一的区别是LazyList有回忆录,而View没有。我是对还是错?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-04 03:30:46

除了第一个(头)元素外,Stream元素是延迟实现的。这被认为是一种缺陷。

List视图被延迟地重新评估,但据我所知,必须首先完全实现。

代码语言:javascript
复制
def bang :Int = {print("BANG! ");1}

LazyList.fill(4)(bang)  //res0: LazyList[Int] = LazyList(<not computed>)
Stream.fill(3)(bang)    //BANG! res1: Stream[Int] = Stream(1, <not computed>)
List.fill(2)(bang).view //BANG! BANG! res2: SeqView[Int] = SeqView(<not computed>)
票数 8
EN

Stack Overflow用户

发布于 2020-01-04 06:58:24

在2.13中,您不能强行从视图返回到原始集合类型:

代码语言:javascript
复制
scala> case class C(n: Int) { def bump = new C(n+1).tap(i => println(s"bump to $i")) }
defined class C

scala> List(C(42)).map(_.bump)
bump to C(43)
res0: List[C] = List(C(43))

scala> List(C(42)).view.map(_.bump)
res1: scala.collection.SeqView[C] = SeqView(<not computed>)

scala> .force
            ^
       warning: method force in trait View is deprecated (since 2.13.0): Views no longer know about their underlying collection type; .force always returns an IndexedSeq
bump to C(43)
res2: scala.collection.IndexedSeq[C] = Vector(C(43))

scala> LazyList(C(42)).map(_.bump)
res3: scala.collection.immutable.LazyList[C] = LazyList(<not computed>)

scala> .force
bump to C(43)
res4: res3.type = LazyList(C(43))

如果调用方需要选择结果类型,则接受视图并可选择返回严格实现的函数也必须采用“强制函数”(如_.toList )。

我在日常工作中不做这种事,但这种行为令我吃惊。

票数 5
EN

Stack Overflow用户

发布于 2022-10-05 14:51:31

不同之处在于,LazyList可以从巨大/无限的序列中生成,因此您可以执行以下操作:

代码语言:javascript
复制
val xs = (1 to 1_000_000_000).to(LazyList)

那也不会耗尽记忆。之后,您可以使用变压器对惰性列表进行操作。通过创建一个List并从中获取一个view,您将无法做到同样的事情。话虽如此,与SeqView相比,LazyList有很多reacher方法集,这就是为什么您实际上可以将LazyListview取为:

代码语言:javascript
复制
val xs = (1 to 1_000_000_000).to(LazyList)
val listView = xs.view
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59587449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档