• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Kotlin中功能操作与集合(KAD 11),

Kotlin中功能操作与集合(KAD 11),

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了kotlin 集合,kotlin,kotlin教程,kotlin android,kotlin语言等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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。

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Kotlin中功能操作与集合(KAD 11),

相关文章

  • 2017-05-26「视频直播技术详解」系列之六:现代播放器原理,
  • 2017-05-26location of the android sdk has not been setup in the preferences,androidpreferences
  • 2017-05-26Android UI:ListView,androiduilistview
  • 2017-05-26错误提示”void is an invalid type for the variable“,invalidvariable
  • 2017-05-26Android-配置文件中设置“android:clickable=&quot;false&quot;无效的原因及解决办法,android-clickable
  • 2017-05-26android入门,看这一本书就够了,android入门,
  • 2017-05-26一个帖子学会Android开发四大组件,android四大
  • 2017-05-26Postgresql通过fdw_JDBC连接查询DB2\Oracle表
  • 2017-05-26kvm性能优化
  • 2017-05-26Activity被回收导致fragment的getActivity为空,fragmentgetactivity

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 活动的生周期(四)活动结束前的数据保存,周期活动结束
    • 自定义一个全屏的AlertDialog。,全屏alertdialog
    • Android对话框,android弹出对话框
    • 2.3.4 ImageView(图像视图)
    • Android 中的R文件 丢失或无法更新,android
    • android.view.InflateException: Binary XML file line #34: Error inflating class,
    • 离线用户的灰色头像处理,离线灰色头像
    • 弧形菜单(Android),弧形菜单android
    • android 所有焦点问题--Focus,android--focus
    • Android事件分发机制源码分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有