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啊!!

你可能感兴趣的:(kotlin学习随笔之takeWhile)