先看看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開發一級語言——此次你絕對不能錯過
歡迎關注個人微信公衆號:終端研發部。一塊兒 學習和 交流。在這裏得到的不單單是技術!