创建数组

在java中一般使用new String[]创建数组,或者干脆split分割字符串得到。但和kotlin相比有很大不同

        // 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)

遍历数组

数组遍历可以使用for-in获取每一个成员,如果还需要索引则可以使用withindex
        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")
        }

创建List

创建list和创建数组差不多,可以使用万能工厂方法listof
        // 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()

chunked 分组遍历

当存在一个list,chunked函数可以把list分割成包含指定元素个数的子list,比如现在有个包含18个元素的list,使用chunked函数拆分成9个list,每个list包含2个元素,总共还是18个元素。先分块后遍历。
        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]




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]

   
        val l1 = listOf(1,2,3,4)
        l1.windowed(2,1){
            println(it)
        }

解构list

将list中的元素拆解成单独的变量的过程就是list的解构
   
        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

按成员的属性对list排序

将List按User.age排序后再按User.sex排序
   
        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 })))

区间操作

   
  val starTime =LocalDate.now()
  val mid =starTime.plusDays(3);
  val end = starTime.plusDays(5)
  val range = starTime..end
  println(mid in range)

尾递归

   

本当の声を響かせてよ