我正在做练习,我发现使用takeWhile()
和filter()
方法可以得到相同的结果,所以我想知道何时必须使用其中一种。
谢谢你,欢迎任何想与我分享的消息来源。
答案 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次迭代时中断并返回空