kotlin学习随笔之takeWhile

使用takeWhile函数时非常奇怪。

valnumbers =intArrayOf(20,10,30)命名了一个Array数组

使用takeWhile选出数组中大于10的元素。

println("takeWhile:${numbers.takeWhile{ it>10}}")

结果:[20]

是的结果只有20,那还有30去哪了?于是我看了下源码:


public inline funIntArray.takeWhile(predicate: (Int) -> Boolean): List {

val list = ArrayList()

for(item in this) {

if(!predicate(item))

break

list.add(item)

}

return list

}


大致意思是:循环遍历每个元素代入判断函数(predicate),不符合的直接break出循环。

什么???excute me??break出循环,难怪没有30.因为循环到元素10的时候不符合判断条件所以break出了循环。

于是乎,我复制源码,自己改了下扩展函数。


public inline fun IntArray.takeWhile2(predicate: (Int) -> Boolean): List {

val list = ArrayList()

for(item in this) {

if(!predicate(item))

continue

list.add(item)

}

returnlist

}

把break改成continue即可。



总结:takeWhile是挺方便都不用自己写循环了,但切记,这仅适用于有序列表。不然会数据丢失,出现不可告人的py啊!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容