zoukankan      html  css  js  c++  java
  • Kotlin中功能操作与集合(KAD 11)

    作者:Antonio Leiva

    时间:Feb 2, 2017

    原文链接:https://antonioleiva.com/functional-operations-collections-kotlin/

    对于我来说,我必须承认用Java代码处理列表是最令人沮丧的事之一。

    在这方面,虽然Java 8利用数据流(Stream)已经有了一些提升,但是如我们早前看到的我们怎样利用高阶函数压缩代码那样,Kotlin语法极大地简化这个过程。

    Kotlin中集合的功能操作

    虽然我不向你展示所有已有的操作(有很多),但是我要向你展示其中一部分,你能够用它们做一些有趣的事。

    如果你需要更完整的列表,你能够在我之前写的这篇文章中找到。

    最有意思的是这些:

    forEach

    用forEach,你能够简单迭代集合每个元素:

    1 viewGroup.children.forEach { v -> v.visibility = VISIBLE }

    记住,用it,这还可以转换为:

    1 viewGroup.children.forEach { it.visibility = VISIBLE }

    在Android中,没有viewGroup.children,但是在前面的文章“怎样获得扩展属性”中已见过。

    map

    这个操作把列表中的每个对象映射的新的列表,之后进行一些转换。回到前面ViewGroup的例子:

    1 val childViews = (0..viewGroup.childCount - 1).map { viewGroup.getChildAt(it) }

    在这种情况下,map操作映射一集合的整数范围(先前已经讨论过范围)到ViewGroup子视图对应的新视图集合中。

    在后续文章,我们将说明在同一个代码块中怎样避免冗余的多次引用ViewGroup。

    filter

    如其名称所示,filter允许我们依据特定条件过滤集合的元素。

    例如,我们要过滤的ViewGroup子视图依次为ViewGroup:

    1 val childViews = viewGroup.children.filter { it is ViewGroup }

    对于这个特殊情况,我们实际可以用filterIsinstance:

    1 val childViews = viewGroup.children.filterIsInstance<ViewGroup>()

    有几种过滤类型,如filterNotNull,它舍弃null项;或filterNot,保留指定条件之外的项。

    first / last

    与前一项有关,它们返回列表满足一定条件的第一个,或最后一个元素:

    1 val firstTextView = viewGroup.children.first { it is TextView }
    2 val lastTextView = viewGroup.children.last { it is TextView }

    如果它们没有找到任何满足条件的元素,这些函数将抛出异常。在这种情况下,可以用替代方法firstOrNull,它会返回null。

    sort

    在Java中,排序元素总有点头疼,且代码的可读性很差。但是,用Kotlin,我们可以以任意条件排序,这就容易多了。

    尽管这个例子可能没有多大意义,但是我可以依据可视性来排序ViewGroup子视图。在视图类中,可视性域是一整数,所以可以非常清晰知道一个视图比另一个大或是小:

    1 val firstTextView = viewGroup.children.sortedBy { it.visibility }

    操作组合

    当然,所有这些操作能够按照我们的要求进行组合,用这种方法,我们可以用少量代码完成十分复杂的操作:

    1  (0..viewGroup.childCount - 1)
    2                 .map { viewGroup.getChildAt(it) }
    3                 .filterIsInstance()
    4                 .sortedBy { it.visibility }
    5                 .takeWhile { it.visibility < View.GONE }

    例如,这里ViewGroup中的所有ViewGroup视图被恢复,依据可视性排序,标记出那些可视性低于GONE(即Visible和INVISIBLE)。

    这不仅仅功能非常强大,而且比你用Java 6编写同样的功能更易于阅读。

    结论

    在Kotlin中,对于集合的操作使我们节省大量代码行,获得更好的表达性和可读性。

    这帮助我们减少编写错误的代码。非常棒!

    如果你要继续学习Kotlin,你能够获得免费指南,学习怎样建立你的第一个项目,或获取这本书,学习怎样从挠头到创建一个复杂的APP。

  • 相关阅读:
    跨域
    关于DEDECMS自定义模型当中添加自定义字段后在后台添加内容后不显示解决方案
    js复制文本
    dedecms 织梦显示时间格式
    基本特效:饿了么丝滑无缝过度搜索栏的实现
    2016-wing的年度总结
    这交互炸了(四) :一分钟让你拥有微信拖拽透明返回PhotoView
    这交互炸了(三):闪屏页是像云一样消失的
    这交互炸了(二):爱范儿是如何让详情页缩小为横向列表的
    这交互炸了:饿了么是怎么让Image变成详情页的
  • 原文地址:https://www.cnblogs.com/figozhg/p/6365704.html
Copyright © 2011-2022 走看看