scala - 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)
为什么?我期待两者的输出相同。
解决方案
dropWhile
丢弃条件为的集合开头的true
所有项目。一旦第一个项目不符合条件,它就会停止丢弃。
filter
丢弃整个集合中条件不成立的所有项目。它直到收集结束才停止。
在您的情况下,由于条件为假,dropWhile
下降1
但到达时停止。2
_ % 2 != 0
filter
另一方面,删除所有_ % 2 == 0
为假的值,即所有奇数值。
推荐阅读
- flutter - 如何检测 Flutter Flame v1.0.0-rc6 及更高版本的点击?
- php - 无法将循环输入字段数据从ajax发送到php
- laravel - Laravel livewire,在一个网格组件中显示两个查询的结果
- javascript - 如何将 json 数据存储到 Cypress 中的变量中
- r - R循环遍历名称特定列以检查值
- pandas - 从字典到有组织的 Excel
- php - PayPal agreement_transaction_list 为空且未更改
- flutter - 上下文弹出后的模态底页
- linux - 额外的串行端口只能工作一半:这是为什么呢?
- python - 任务中的芹菜中继消息