Kotlin基础-集合
[infobox title="创建数组"]在java中一般使用new String[]
创建数组,或者干脆split分割字符串得到。但和kotlin相比有很大不同[/infobox]
// arrayOf(vararg elements: T): Array // 快速构建数组的工厂方法 val l1 = arrayOf("", "", "") // 快速构建指定类型和长度的空数组 val l2 = arrayOfNulls(5) // constructor(size: Int, init: (Int) -> T) // Array的一个构造方法 init方法会接收index并返回该index对应的value // 用于快速构建一个自定义value的数组 val l3 = Array(3) { i -> println(i) i * 2 } // 还有一堆原生类型的数组创建工厂 intArrayOf(1, 2, 3, 4) booleanArrayOf(true, false, false) doubleArrayOf(12.3, 33.9, 33.3)
[infobox title="遍历数组"]数组遍历可以使用for-in
获取每一个成员,如果还需要索引则可以使用withindex
[/infobox]
val l1 = arrayOf("1", "2", "3") for (str in l1) { println(str) } // (index, value) 写法是对对象属性的解构 和ES里的差不多 // 例子如下: // data class User(val name: String, val age: Int) // val (name, age) = User("", 2) for ((index, value) in l1.withIndex()) { println("$index:$value") }
[infobox title="创建List"]创建list和创建数组差不多,可以使用万能工厂方法listof
[/infobox]
// listof创建的数组都是不可变的,也就是没有set方法 val l1 = listOf("1", "2", "3") // mapof创建的Map也是不可变的 val map = mapOf(1 to 1, 2 to 2) // 不可变set val set = setOf(1, 2, 3) // 如果想要创建可修改的list map 或者set // 需要在工厂方法前面加 mutable mutableListOf("") mutableMapOf(1 to 1) mutableSetOf(1) // 如果想把可修改的list 转化为不可变list 直接调用tolist即可 mutableListOf("").toList() mutableMapOf(1 to 1).toMap() mutableSetOf(1).toSet()
[infobox title="chunked 分组遍历"]当存在一个list,chunked函数可以把list分割成包含指定元素个数的子list,比如现在有个包含18个元素的list,使用chunked函数拆分成9个list,每个list包含2个元素,总共还是18个元素。先分块后遍历。[/infobox]
val l1 = listOf("1", "2", "3","4","5","6","7") l1.chunked(2){ println("开始遍历一次"+it.size) println(it) }
打印输出内容
开始遍历一次2 [1, 2] 开始遍历一次2 [3, 4] 开始遍历一次2 [5, 6] 开始遍历一次1 [7]
[infobox title="windowed 滑块遍历"]windowed函数和chunked类似,chunked方法其实是对windowed方法的进一步封装,相比chunked,windowed多了一个参数setp,在chunked函数中step的值等于size的值,也就是步进的大小和分割后每个小块的大小相等,但是在windowed是可修改的。比如数组【1,2,3,4】使用windowed(2,1)会被拆解成[1,2][2,3][3,4][/infobox]
val l1 = listOf(1,2,3,4) l1.windowed(2,1){ println(it) }
[infobox title="解构list"]将list中的元素拆解成单独的变量的过程就是list的解构[/infobox]
val l1 = listOf(1, 2, 3, 4) val (a, b, c, d) = l1 println(a) // 1 println(d) // 4 val (e,f) = l1 println(f) // 2
[infobox title="按成员的属性对list排序"]将List
val users = listOf(User(12, "男"), User(17, "男"), User(6, "男"), User(6, "女"), User(20, "女")) // 按年龄升序 println(users.sortedBy { it.age }) // 按性别排序后再按年龄排序 println(users.sortedWith(compareBy({ it.six }, { it.age })))
[infobox title="区间操作"][/infobox]
val starTime =LocalDate.now() val mid =starTime.plusDays(3); val end = starTime.plusDays(5) val range = starTime..end println(mid in range)
[infobox title="尾递归"][/infobox]