给定代码:
val test = List(1, 2, 3)
printList[Int](test.dropWhile((a: Int) => {a == 1}))
它会正确打印:2 3
在使用这样的代码时:
val test = List(1, 2, 3)
printList[Int](test.dropWhile((a: Int) => {a == 2}))
它会打印错误:1 2 3
a == 3
也是如此
如何正确使用dropWhile
?
好吧,我发现dropWhile返回“此列表的最长后缀,其第一个元素不满足谓词p。” 所以如果我想要检测一些满足谓词p的元素,我必须使用filterNot:)
答案 0 :(得分:24)
那是因为dropWhile
删除满足谓词的元素的最长前缀。
也就是说,只要不再满足条件,它就会停止下降。在你的第二个例子中,它从一开始就没有得到满足,因此没有任何东西被删除。
使用过滤器(选择满足谓词的所有元素)或filterNot(选择所有不满足谓词的元素)可能会更好:
val test = List(1, 2, 3)
printList[Int](test.filterNot((a: Int) => {a == 2}))
或
val test = List(1, 2, 3)
printList[Int](test.filter((a: Int) => {a != 2}))