gpt4 book ai didi

Scala:流上的 filter 和 takeWhile 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 09:06:11 24 4
gpt4 key购买 nike

我刚开始学习 Scala,在处理流时,我对 filter 和 takeWhile 感到困惑。

我遇到了这个程序来生成素数,它在流上同时使用 takeWhile 和 filter。

lazy val ps: Stream[Int] = 2 #:: Stream.from(3).filter(i => 
ps.takeWhile{j => j * j <= i}.forall{ k => i % k > 0});

在试验时我发现
Stream.from(1).takeWhile(_ < 10).toList

还我
List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)

尽管
 Stream.from(1).filter(_ < 10).toList

无限运行。

最佳答案

差异不是特定于流的,但对于扩展 GenTraversableLike 的所有集合都是相同的:
filter

Returns all the elements that satisfy the predicate p


takeWhile

Returns the longest prefix whose elements satisfy the predicate p.



例如。
> List(1, 2, 3, 4).filter(_ % 2 == 1)
List(1, 3)

> List(1, 2, 3, 4).takeWhile(_ % 2 == 1)
List(1)

特别是 Stream.from(1).filter(_ < 10).toList没有完成,因为它必须检查流的每个元素:它不“知道”不会有任何满足 _ < 10 的元素在 9 之后(实际上,有,多亏了环绕)。

关于Scala:流上的 filter 和 takeWhile 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35176819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com