Scala Drop虽然vs过滤器

时间:2018-07-29 18:32:49

标签: scala filter functional-programming iterator

val xs = Iterator
  .from(1)
  .dropWhile(_ % 2 != 0)
  .takeWhile(_ < 10)
  .toList
val ys = Iterator
  .from(1)
  .filter(_ % 2 == 0)
  .takeWhile(_ < 10)
  .toList
println(xs)
println(ys)

输出:

List(2, 3, 4, 5, 6, 7, 8, 9)
List(2, 4, 6, 8)

为什么?我期望两者的输出相同。

1 个答案:

答案 0 :(得分:2)

dropWhile丢弃条件为true的集合开始处的所有 项目。第一项失败后,它将立即停止丢弃。

filter丢弃条件不成立的整个集合中的所有项目 。直到收集结束,它才会停止。

在您的情况下,dropWhile会掉落1,但在到达2时会停止,因为条件_ % 2 != 0为假。

另一方面,

filter丢弃_ % 2 == 0为假的所有值,即所有奇数。