为什么List.dropWhile不起作用?

时间:2013-10-14 00:54:07

标签: scala

给定代码:

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:)

1 个答案:

答案 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}))