先看看Kotlin中for循环的遍历javascript
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.size println("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") } } }
Java中集合及其工具类 | Kotlin中Java中集合及其工具类 |
---|---|
List | MutableList |
Set | MutableSet |
Map | MutableMap |
Collection | MutableCollection |
List | MutableList |
Set | MutableSet |
Map | MutableMap |
Collection | MutableCollection |
Iterable | MutableIterable |
Iterable:父类。全部咱们能够遍历一系列的都是实现这个接口。php
MutableIterable:一个支持遍历的同时能够执行删除的Iterables。html
Collection:这个类相是一个范性集合。咱们经过函数访问能够返回集合的size、是否为空、是否包含一个或者一些item。这个集合的全部方法提供查询,由于connections是不可修改的。java
MutableCollection:一个支持增长和删除item的Collection。它提供了额外的函数,好比add 、remove、clear等等。数组
List:多是最流行的集合类型。它是一个范性有序的集合。由于它的有序,咱们可使用get函数经过position来访问。ruby
MutableList:一个支持增长和删除item的List。bash
Set:一个无序并不支持重复item的集合。微信
MutableSet:一个支持增长和删除item的Set。app
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()
当咱们声明一个集合,能够把这个集合根据调用集合类相应的高阶函数来转换成相应的数组。集合类提供了toIntArray()、toDoubleArray()、toFloatArray()、toBetArray(),toTypedArray等高阶函数去处理。
Kotlin中,集合可分为不可变集合与可变集合。咱们声明一个集合或者数组,能够转换成相应类型的集合。调用toXXX()转换成不可变集合。调用toMutableXXX()转换为可变集合。集合类提供了toList()、toMutableList()、toSet()、toMutableSet()、toHashSet()、toMap()等高阶函数去处理
例如:
嗯,今天就提到这里,学习Kotlin还有很长的一段路走,一门新的语言须要一颗耐心,摒弃杂念,向前出发吧
推荐几个学习的地址:
官网文档:
runoob中文文档
Kotlin已成为Android开发一级语言——此次你绝对不能错过
欢迎关注个人微信公众号:终端研发部。一块儿 学习和 交流。在这里得到的不单单是技术!