首页 > 解决方案 > Scala dropWhile 与过滤器

问题描述

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)

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

标签: scalafilterfunctional-programmingiterator

解决方案


dropWhile丢弃条件为的集合开头的true所有项目。一旦第一个项目不符合条件,它就会停止丢弃。

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

在您的情况下,由于条件为假,dropWhile下降1但到达时停止。2_ % 2 != 0

filter另一方面,删除所有_ % 2 == 0为假的值,即所有奇数值。


推荐阅读