不积跬步无以至千里,不积小流无以成江海

先看看Kotlin中for循环的遍历

 fun  testList(){var StringVal = "12_12_13_15_a_b_c_d_yu_er"var ssArray = StringVal.split("_")var ss01 = ssArray[0]var ss02 = ssArray[1]var size =  ssArray.sizeprintln("ss01: $ss01") println("ss02: $ss02") println("size:$size") val items = listOf("apple", "banana", "kiwi") //迭代for循环 for (item in ssArray){ println("item: $item") } for (item in ssArray) println("item: $item") //循环体可以是一个代码块: for (item : String in ssArray ){ println("item: $item") } //通过索引进行遍历,for 可以循环遍历任何提供了迭代器的对象。 //如果你想要通过索引遍历一个数组或者一个 list //注意这种"在区间上遍历"会编译成优化的实现而不会创建额外对象。 for (i in ssArray.indices) { print(ssArray[i]) } //这种"在区间上遍历"会编译成优化的实现而不会创建额外对象。或者你可以用库函数 withIndex: fun forbetween(index :Int,value : Objects){ for ((index,value) in ssArray.withIndex()){ println("the element at $index is $value") } } } 

kotlin和Java中的集合工具类

Java中集合及其工具类 Kotlin中Java中集合及其工具类
List MutableList
Set MutableSet
Map MutableMap
Collection MutableCollection
List MutableList
Set MutableSet
Map MutableMap
Collection MutableCollection
Iterable MutableIterable
,Kotlin针对集合进行了更加简洁和有效的封装
  • Iterable:父类。所有我们可以遍历一系列的都是实现这个接口。

  • MutableIterable:一个支持遍历的同时可以执行删除的Iterables。

  • Collection:这个类相是一个范性集合。我们通过函数访问可以返回集合的size、是否为空、是否包含一个或者一些item。这个集合的所有方法提供查询,因为connections是不可修改的。

  • MutableCollection:一个支持增加和删除item的Collection。它提供了额外的函数,比如add 、remove、clear等等。

  • List:可能是最流行的集合类型。它是一个范性有序的集合。因为它的有序,我们可以使用get函数通过position来访问。

  • MutableList:一个支持增加和删除item的List。

  • Set:一个无序并不支持重复item的集合。

  • MutableSet:一个支持增加和删除item的Set。

  • Map:一个key-value对的collection。key在map中是唯一的,也就是说不能有两对key是一样的键值对存在于一个map中。

  • MutableMap:一个支持增加和删除item的map。

比如: List是以线性方式管理物件集合,其可以很快的在任何地方进行增加和删除元素。List<E>接口继承Collection<E>接口,集合中可以存放重复对象。

对于接口的实现

Kotlin中可以这样写:

而在Java 中却不能这样写:

集合的创建

        val list1 = listOf<Int>()           //返回的是kotlin的List,只读val list2 = mutableListOf<Int>()    //返回的是kotlin的MutableList,可读写val list3 = arrayListOf<Int>()      //返回的是java的ArrayList,java的ArrayList是可读写的var setList = setOf<Int>()         //返回的是kotlin的set集合,一个无序并不支持重复item的集合 只读 var setMutableList = mutableSetOf<Int>() //返回的是kotlin的set集合 MutableSet 可读写 var hashSet = hashSetOf<Int>() //返回的是java的set集合 hashSet 可读写 var map = mapOf<String, Int>() //返回kotlin中的map,只读 mutableMapOf<String, Int>() // 返回的是kotlin中的hashmap集合,可读可写 hashMapOf<String, Int>() //返回java中的hashmap 可读可写 //eg:怎么取用 list2.add(1) var first : Int = list2.first() list3.add(1) var first2 : Int = list3.first() 

集合set:

一些常用的用法

set集合中的元素是不会有重复的,并且是乱序的。创建set需要使用setOf(),mutableSetOf():

val set= setOf<String>("祖安","皮尔特沃夫"
)
val mutableSet= mutableSetOf<String>("阿利斯塔", "希维尔" ) 

Map:
Map是一个存放键和值的集合,每一个元素都包含键和值。Kotlin中Map和list一样,也分为只读和可变两种Map。

创建Map时需要调用mapOf(),mutableMapOf():

val map= mapOf<Int,String>(1 to "伊泽瑞尔", 2 to "雷克顿", 3 to "古拉加斯", 4 to "泰达米尔" ) val hashMap= hashMapOf<Int,String>( 1 to "伊泽瑞尔", 2 to "雷克顿", 3 to "古拉加斯", 4 to "泰达米尔" ) 

map和hashMap的区别,这里就不说了,Java的基础

val count=map.size  //获取元素数量
val keys=map.keys   //返回map中key的集合
keys.forEach(::print)   //输出Log:1,2,3,4 val values=map.values //返回map中key的集合 values.forEach(::print) //输出Log:伊泽瑞尔,雷克顿,古拉加斯,泰达米尔 val entry=map.entries //返回键/值对集合 entry.forEach{ println("key: ${it.key} , value: ${it.value}") } //输出key:1 , value:伊泽瑞尔 key:2... val isEmpty=map.isEmpty() //判断集合是否为空 Boolean val isContainsKey=map.containsKey(3) //判断集合中是否包含某个key val isContainsValue=map.containsValue("雷克顿") //判断集合中是否包含某个value val valueStr=map.get(2) //获取指定key的元素值,没有则返回null 

上面说了map和list一样是只读的,可变的map需要使用mutableMap:

var mutableMapOf= mutableMapOf<Int,String>()
mutableMapOf.putAll(map)    //添加整个map
mutableMapOf.put(5,"拉克丝") //添加指定key的value mutableMapOf.remove(2) //移除元素 mutableMapOf.clear() //清空集合 

很多情况下,函数和方法的名字和list的都是一样的。

集合操作符

val list = listOf(1, 2, 3, 4, 5, 6) list.any {//只要集合中的任何一个元素满足条件(使得lambda表达式返回true),any函数就返回true it >= 0 } list.all {//集合中的全部元素都满足条件(使得lambda表达式返回true),all函数才返回true it >= 0 } list.none {//若集合中没有元素满足条件(使lambda表达式返回true),则none函数返回true it < 0 } list.count {//count函数的返回值为:集合中满足条件的元素的总数 it >= 0 } 

累计

//对所有元素求和
kotlinList.sum()//将集合中的每一个元素代入lambda表达式,然后对lambda表达式的返回值求和
kotlinList.sumBy {it % 2
}//在一个初始值的基础上,从第一项到最后一项通过一个函数累计所有的元素
//accumulator的初始值为100,element从集合的第一个元素开始,lambda表达式的返回值就是accumulator的新值 kotlinList.fold(100) { accumulator, element -> accumulator + element / 2 } //同fold,只是迭代的方向相反 kotlinList.foldRight(100) { accumulator, element -> accumulator + element / 2 } //同fold,只是accumulator的初始值就是集合的第一个元素,element从第二个元素开始 kotlinList.reduce { accumulator, element -> accumulator + element / 2 } //同reduce但方向相反:accumulator的初始值就是集合的最后一个元素,element从倒数第二个元素开始往前迭代 kotlinList.reduceRight { accumulator, element -> accumulator + element / 2 } 

遍历

//遍历所有元素
kotlinList.forEach {print(it)
}//同forEach,只是可以同时拿到元素的索引
kotlinList.forEachIndexed { index, value ->println("position $index contains a $value") } 

最大最小

//返回集合中最大的元素,集合为空(empty)则返回null
kotlinList.max()//返回集合中使得lambda表达式返回值最大的元素,集合为空(empty)则返回null
kotlinList.maxBy { it }//返回集合中最小的元素,集合为空(empty)则返回null
kotlinList.min()//返回集合中使得lambda表达式返回值最小的元素,集合为空(empty)则返回null
kotlinList.minBy { it }

过滤

//返回一个新List,去除集合的前n个元素
kotlinList.drop(2)
//返回一个新List,去除集合的后n个元素
kotlinList.dropLast(2)
//返回一个新List,去除集合中满足条件(lambda返回true)的第一个元素 list.dropWhile { it > 3 } //返回一个新List,去除集合中满足条件(lambda返回true)的最后一个元素 kotlinList.dropLastWhile { it > 3 } 

排序&逆序

val list = listOf(1, 2, 3, 4, 5, 6) list.reversed() //返回一个颠倒元素顺序的新集合 list.sorted() //返回一个升序排序后的新集合 list.sortedBy {//将每个元素代入lambda表达式,根据lambda表达式返回值的大小来对集合进行排序 it*2 } list.sortedDescending()//返回一个降序排序后的新集合 list.sortedByDescending { it*2 } 

合并&分解

val list = listOf(1, 2, 3, 4, 5, 6) val list2 = listOf(5, 6, 7, 8, 9, 0) //拼接两个集合,返回一个新集合 //本质是调用list.plus(list2) list + list2 //把一个给定的集合分割成两个list,一个list中是代入lambda表达式后返回true的元素,另一个list中是代入后返回false的元素 val (list3, list4) = list.partition { it % 2 == 0 } //返回一个由pair组成的list,每一个pair由两个集合中相同index的元素组成 val pairList: List<Pair<Int, Int>> = list.zip(list2) //unzip与zip的功能相反,将一个由pair组成的list分解成两个list val (list5, list6) = pairList.unzip() 

Kotlin集合转换为数组

当我们声明一个集合,可以把这个集合根据调用集合类相应的高阶函数来转换成相应的数组。集合类提供了toIntArray()、toDoubleArray()、toFloatArray()、toBetArray(),toTypedArray等高阶函数去处理。

Kotlin集合转换为数组

Kotlin数组转换为集合

Kotlin中,集合可分为不可变集合与可变集合。我们声明一个集合或者数组,可以转换成相应类型的集合。调用toXXX()转换成不可变集合。调用toMutableXXX()转换为可变集合。集合类提供了toList()、toMutableList()、toSet()、toMutableSet()、toHashSet()、toMap()等高阶函数去处理

例如:

Kotlin数组转换为集合

嗯,今天就提到这里,学习Kotlin还有很长的一段路走,一门新的语言需要一颗耐心,摒弃杂念,向前出发吧

推荐几个学习的地址:

官网文档:

http://kotlinlang.org/

runoob中文文档

http://www.runoob.com/kotlin/kotlin-loop-control.html

Kotlin开发之旅《一》— 初学者Kotlin基础必备

我的Android重构之旅:插件化篇

20+个很棒的Android开源项目

Kotlin已成为Android开发一级语言——这次你绝对不能错过

相信自己,没有做不到的,只有想不到的

欢迎关注我的微信公众号:终端研发部。一起 学习和 交流。在这里获得的不仅仅是技术!

转载于:https://www.cnblogs.com/gooder2-android/p/9316047.html

kotlin学习笔记-异常好玩的list集合总结 1相关推荐

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

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

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

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

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

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

  4. Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~

    又是一个月没见了,坚持永远是世上最难的事情,但,往往难事才会有更大的收获.与君共勉~ 前段时间一直在学习 Compose,所以导致 Kotlin 笔记系列搁置了好久.一方面是因为 Compose 的学 ...

  5. Kotlin学习笔记(2)- 空安全

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  6. kotlin学习笔记——枚举、封闭类

    1.枚举 kotlin中提供类枚举的实现,与java相同.枚举可以带参数,如 enum Icon(val res: Int){MENU(R.drawable.menu),BACK(R.drawable ...

  7. Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段

    Kotlin 学习笔记(七)-- Kotlin类与对象之属性与字段 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- ...

  8. HALCON 21.11:深度学习笔记---异常检测(9)

    HALCON 21.11:深度学习笔记---异常检测(9) HALCON 21.11.0.0中,实现了深度学习方法. 本章介绍了如何使用基于深度学习的异常检测. 通过异常检测,我们想要检测图像是否包含 ...

  9. Kotlin学习笔记12——数据类和密封类

    Kotlin学习笔记12--数据类和密封类 前言 数据类 在类体中声明的属性 复制 componentN 解构声明 密封类 尾巴 前言 上一篇,我们学习了Kotlin中的拓展,今天继续来学习Kotli ...

最新文章

  1. 攻和防谁更厉害?AI技术在恶意软件检测中的应用和对抗
  2. Python数据结构与算法(第一天)
  3. 这份门禁系统培训PPT也太全面了,门禁系统知识,看这一篇就够了
  4. 大二暑假周进度报告(五)
  5. 哪些信用卡取现0手续费?
  6. 【排序函数讲解】sort-C++
  7. dipole antenna simulation by HFSS
  8. linux测试api,testing - 测试基本使用接口
  9. linux Apache2.4安装提示APR not found的解决办法
  10. maven搭建mybatis测试
  11. 展讯8541E:NFC PM1810驱动调试
  12. 三极管原理-导通条件
  13. 如何玩转私域引流?全链路拆解经典玩法和实战案例
  14. Flask 物联网局部应用情景
  15. Mac终端命令和连接服务器
  16. 抖音评论怎么引流?商家如何利用抖音评论区
  17. 查看本机MAC地址的方法
  18. 建设工程法规专科【6】
  19. 在C++Builder中可以利用FireMonkey的函数实现RGB与HSL之间的转换
  20. move_base参数配置

热门文章

  1. 【冲刺冬奥速度】掌握这两个调优技巧,让TiDB性能提速千倍
  2. 亚马逊扫号侵权,卖家要如何自保?如何申诉?
  3. 小红书文案怎么写才能吸引用户,品牌写文技巧
  4. EXCEL 数字无法降序筛选的解决方案
  5. mysql转义字符 小于_mysql 转义字符问题
  6. mysql怎么转义字符_MySQL的转义字符\
  7. 帮你抢小游戏流量红利——oppo小游戏接入指南
  8. html5照片墙动画效果,HTML5/Masonry带弹性渐入动画的照片墙
  9. 光驱驱动问题,出现黄色感叹号,找不到盘符的解决办法
  10. 美团笔试2019/8/23