<本文学习郭神《第三行代码》总结>

集合主要就是List、Set、Map,它们在Java中都有接口可以实现,
List --> ArrayList、LinkedList
Set --> HashSet
Map–> HashMap

1、List集合初始化
在Kotlin中初始化集合一般这样做:

val list = ArrayList<String>()
list.add("1")
list.add("2")

这种很繁琐,所以这里将会介绍list的几个方法:listof()、mutableListOf()

val list = listOf("aa", "bb")
val list = mutableListOf("aa", "bb")

listof():创建的是一个不可变的集合,该集合创建成功只能用于读取数据,不能增删改集合数据。
mutableListOf():创建的是一个可变的集合,可以进行增删改查操作。
遍历List集合需要使用for-in循环进行遍历,比如:

fun main(){val list1 = listOf("aa", "bb") for (content in list1){content.toUpperCase()//把遍历内容大写print(content)}val list2 = mutableListOf("aa", "bb") list2.add("cc")for (content in list2){content.toUpperCase()//把遍历内容大写print(content)}
}

2、Set集合
Set和List的用法其实一样,在初始化时会用到这几个方法:setof()、mutableSetOf()

val set = setOf("aa", "bb")
val set = mutableSetOf("aa", "bb")

setof():创建的是一个不可变的集合,该集合创建成功只能用于读取数据,不能增删改集合数据。
mutableSetOf():创建的是一个可变的集合,可以进行增删改查操作。
在这里,Set集合List集合的区别需要注意的是,Set底层是使用Hash映射机制来存储数据的,因此集合中的元素无法保证有序。
----遍历和List一样,就不做解释了

3、Map集合初始化
Map集合这里重点介绍,Map和前两者不同,Map是一种键值对形式的数据结构,因此在用法上和List、Set存在很大不同。
一般初始化Map时都需要创建一个HashMap

val map = HashMap<String, String>()
map.put("aa", "1")
map.put("bb", "2")

因为在Kotlin中,并不建议使用put()、get()方法对Map进行添加和读取数据,而是使用这种类似下标的方式添加数据:

val map = HashMap<String, String>()
map["aa"] = 1
map["bb"] = 2

当读取数据时

val text = map["aa"]

然而,上面这种添加数据方式依然很繁琐,和List、Set一样,Map也有自己的方法mapof()、mutableMapOf()

val map1 = mapOf("aa" to 1, "bb" to 2)  //不可变
val map2 = mutableMapOf("aa" to 1, "bb" to 2)   //可变

mapof():创建的是一个不可变的集合,该集合创建成功只能用于读取数据,不能增删改集合数据。
mutableMapOf():创建的是一个可变的集合,可以进行增删改查操作。
遍历Map集合,也是使用的for-in循环,唯一区别在于,for-in循环中,map键值对变量一起申明到了一对括号中

fun main(){val map1 = mapOf("aa" to 1, "bb" to 2) for ((content1, content2) in map1){print(content1 + "--" + content2)}
}

4、集合函数式API(lambda)
首先定义一个集合,然后找出里面长度最长的元素

val list1 = listOf("aa", "bbbb", "cc")
var maxLength = ""
for (content in list1){if (content.length > maxLength.length){maxLength = content}
}
print(maxLength)

传统方式一般是这样写的,但是对于集合的函数式API,可以让这个功能更简介

val list1 = listOf("aa", "bbbb", "cc")
var maxLength = list1.maxBy { it.length }
print(maxLength)

这就是函数API的用法,只是一行代码就可以搞定。
接下来就看一下它的推导过程:
首先我们先了解一下lambda表达式结构:

{ 参数名1:参数类型, 参数名2:参数类型 -> 函数体 }

最外面一个大括号,如果有参数值传入表达式中,则需要申明参数,参数列表结尾 -> ,标识参数列表的结束以及函数体的开始,函数体中可编写任意代码。
现在回到前面,首先maxBy的工作原理是根据传入的条件来进行遍历,从而找打最大值,所以,套用Lambda函数表达式就可以写成:

val list1 = listOf("aa", "bbbb", "cc")
var lambda = { content :String -> content.length }
var maxLength = list1.maxBy ( lambda )
print(maxLength)

maxBy函数实质上是接收了一个lambda参数,
其次,在开发中不需要特地定义一个lambda变量,可以直接将lambda表达式传入maxBy函数中,

val list1 = listOf("aa", "bbbb", "cc")
var maxLength = list1.maxBy( { content :String -> content.length })
print(maxLength)

在Kotlin规定中,当Lambda参数是函数的最后一个参数时,可以将Lambda表达式移到括号外,

val list1 = listOf("aa", "bbbb", "cc")
var maxLength = list1.maxBy() { content :String -> content.length }
print(maxLength)

如果Lambda参数时函数唯一一个参数时,可以将括号省略,

val list1 = listOf("aa", "bbbb", "cc")
var maxLength = list1.maxBy { content :String -> content.length }
print(maxLength)

由于Kotlin中的类型推导机制,Lambda表达式在大多数情况下不必申明参数类型,

val list1 = listOf("aa", "bbbb", "cc")
var maxLength = list1.maxBy { content  -> content.length }
print(maxLength)

最后,当Lambda表达式的参数列表中只有一个参数时,也不必申明参数名,可以直接使用关键字 it 代替,

val list1 = listOf("aa", "bbbb", "cc")
var maxLength = list1.maxBy { it.length }
print(maxLength)

5、常用的集合函数式API
(1)、map()函数
它用于将每个元素都映射成一个另外的值,映射规则在Lambda表达式中指定,最终生成一个新的集合,

val list1 = listOf("aa", "bb")
var newList = list1.map{ it.toUpperCase()}
for (content in list1){content.toUpperCase() //转换成大写模式
}

(2)、filter()函数
用于过滤集合中的数据,可以单独使用,也可以和map()一起使用

val list1 = listOf("aa", "bbbb", "cc")
var list2 = list1.filter { it.length <= 2 }.map { it.toUpperCase() }

(3)、any()函数
判断集合中是否至少存在一个元素满足指定条件

val list1 = listOf("aa", "bbbb", "cc")
var anyResult = list1.any { it.length <= 2 }

(4)、all()函数
判断集合中是否所有元素都满足指定条件

val list1 = listOf("aa", "bbbb", "cc")
var allResult = list1.all { it.length <= 2 }

Kotlin学习路(一):集合使用相关推荐

  1. Kotlin学习路(七):高阶函数与内联函数关系

    <本文学习郭神<第三行代码>总结> 定义用法 高阶函数:如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数称为高阶函数. 语法规则:(String, ...

  2. kotlin学习笔记-异常好玩的list集合总结

    不积跬步无以至千里,不积小流无以成江海 先看看Kotlin中for循环的遍历 fun testList(){var StringVal = "12_12_13_15_a_b_c_d_yu_e ...

  3. kotlin学习笔记-异常好玩的list集合总结 1

    不积跬步无以至千里,不积小流无以成江海 先看看Kotlin中for循环的遍历 fun testList(){var StringVal = "12_12_13_15_a_b_c_d_yu_e ...

  4. Kotlin学习记录(四)—— 常用集合的使用

    接上篇: Kotlin学习记录(三)-- 子线程获取数据,实现简单ListView 集合在程序中的比例的很重的,Kotlin针对集合进行了更加简洁和有效的封装,这边文章就简单的介绍一下list,map ...

  5. Kotlin学习笔记--Kotlin之集合

    Kotlin学习笔记--Kotlin之集合 集合类 1. List 集合 1.1 不可变list 1.2 可变list MutableList 1.3 集合遍历 1.4 List的操作函数 1.5 l ...

  6. Kotlin学习笔记 第四章 解构声明 集合集合的扩展方法 Range 异常 Throw关键字

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  7. 快速学习Kotlin(七)集合与操作符

    集合是我们在代码编写时常用的操作数据的方式之一,具有非常重要的作用. 在kotlin中也有集合的概念,kotlin中的集合一般有三种:List.Map以及Set三种.而这三种集合每种又可以分为可变集合 ...

  8. kotlin学习目录

    目录 kotlin学习之基础(一) kotlin学习之函数(二) kotlin学习之类(三) kotlin学习之类的扩展(四) kotlin学习之密封类(五) kotlin学习之嵌套类和内部类(六) ...

  9. Kotlin学习笔记20 阶段复习2

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 lambda表达式 内联函数 Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数_积跬步 至千里- ...

最新文章

  1. (0069)iOS开发之dequeueReusableCellWithIdentifier的两个方法的区别
  2. 安装class-dump
  3. 使用Managed DirectX编写游戏
  4. 只会使用 WaitGroup?你应该学习下 ErrGroup!
  5. pymysql 于pycharm中操作mysql
  6. c语言中加法和乘法的消耗,急!!!!c语言:求n次多项式的加法和乘法
  7. python代码中怎么增加数据_python 实现数据库中数据添加、查询与更新的示例代码...
  8. 2016年回顾2017年目标之流水账
  9. centos选择php7 作为默认版本_树莓派下安装Nginx+Php7.3 搭建Web服务器
  10. 太极发送卡片软件_QQxml卡片消息发送-防撤回等等安卓QQ插件Notified-支持太极框架 -发送QQ卡片消息...
  11. 6种php加密解密方法
  12. mysql 约束 分类,MySQL约束类型及举例介绍
  13. .NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法
  14. 苹果笔记本怎么查看计算机基本信息,怎么区分查找苹果电脑笔记本macBook pro的年份、型号及序列号...
  15. 关于Python的面向对象
  16. pandoc提取word中的图片
  17. 2021-2027全球与中国牛肉罐头市场现状及未来发展趋势
  18. linux人必须知道之人
  19. android 验证码之短信验证(云之讯短信平台)
  20. STM32——打地鼠

热门文章

  1. 2023年(第一批)上海市服务业发展引导资金杨浦区拟转报项目名单公示
  2. P2P相关软件源代码下载
  3. 诺基亚7.2 刷TWRP
  4. JavaScript-读 You Dont Know JS,this到底是什么
  5. Andorid-的面试题
  6. CDO关注的5大趋势
  7. c语言输出内凹图形程序,C程序格式串缺陷检测技术
  8. [论文笔记]Vehicle-to-Everything (v2x) Services Supported by LTE-based Systems and 5g
  9. 【Android】corners失效
  10. android项目开发教程,Android项目开发教程