美文网首页
kotlin学习随笔之takeWhile

kotlin学习随笔之takeWhile

作者: 全汪汪 | 来源:发表于2017-07-28 12:57 被阅读0次

    使用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

          本文链接:https://www.haomeiwen.com/subject/nykiuttx.html