Kotlin中takeWhile()和filter()方法之间的区别

时间:2017-05-11 18:27:15

标签: collections kotlin

我正在做练习,我发现使用takeWhile()filter()方法可以得到相同的结果,所以我想知道何时必须使用其中一种。

谢谢你,欢迎任何想与我分享的消息来源。

2 个答案:

答案 0 :(得分:22)

两者之间的区别是filter()方法返回一个列表,其中包含与特定条件匹配的元素。 takeWhile()方法还返回一个列表,其中包含与特定条件匹配的元素,但只考虑列表中的第一个元素。

一个例子:

val numbers = arrayOf(3, 3, 3, 9, 1, 4, 5, 8, 96, 3, 66, 3, 3, 3)

println("*** takeWhile()")
println(numbers.takeWhile { it == 3 })
println("*** filter()")
println(numbers.filter { it -> it == 3 })

那会给你:

*** takeWhile()
[3, 3, 3]
*** filter()
[3, 3, 3, 3, 3, 3, 3]

答案 1 :(得分:1)

过滤器将遍历整个输入迭代器,而一旦谓词变为False,takewhile就会中断, 如果您有一个迭代器的第1个元素为false谓词,则takewhile会在第1次迭代时中断并返回空