写点什么

Kotlin 语法手册(二)

  • 2022 年 2 月 14 日
  • 本文字数:5281 字

    阅读完需:约 17 分钟

Kotlin语法手册(二)

Kotlin 语法手册(二)

在使用 kotlin 时,由于掌握的不够牢靠,好多时候也还是 Java 编程的习惯,浪费了 kotlin 提供的语言特性,方便性,间接性,在阅读一些 Android 开源库的时候,由于好多都是 kotlin 语法编写的,看的比较费劲,还得去查阅 kotlin 的语法,比较不方便,故把 kotlin 的语法记录下来,方便查阅温故,巩固自己的基础知识。

函数操作符

总数操作符

any

如果至少有一个元素符合给出的判断条件,则返回 true


    val list = listOf(1, 3, 5, 7, 9)    println(list.any { it > 13 })  //false    println(list.any { it > 7 })   //true
复制代码

all

如果全部的元素符合给出的判断条件,则返回 true


    val list = listOf(1, 3, 5, 7, 9)      println(list.all { it > 13 })  //false   println(list.all { it > 0 })   //true
复制代码

count

返回符合给出判断条件的元素总数


    val list = listOf(1, 3, 5, 7, 9)    println(list.count { it > 7 })  //1    println(list.count { it > 2 })  //4
复制代码

fold

在一个初始值的基础上从第一项到最后一项通过一个函数累计所有的元素


fun main() {    val list = listOf(1, 3, 5, 7, 9)    println(list.fold(2) { total, next->        println("$next , $total")        next + total    })}
复制代码


1 , 2//集合的第一个元素1,和初始化基础值23 , 3//集合的第二个元素3,上次累加的1+2=35 , 6//集合的第三个元素5,上次累加的3+3=67 , 11//集合的第四个元素7,上次累加的5+6=119 , 18//集合的第五个元素9,上次累加的7+11=1827//外层println(list...)输入返回值9+18=27
复制代码

foldRight

与 fold  一样,但顺序是从最后一项到第一项


    val list = listOf(1, 3, 5, 7, 9)    println(list.foldRight(2) { next, total->        println("$next , $total")        next + total    })
复制代码


9 , 27 , 115 , 183 , 231 , 2627
复制代码

forEach

    val list = listOf(1, 3, 5, 7, 9)    list.forEach { print(it + 1) } //246810
复制代码

forEachIndexed

类似于 forEach ,同时可以得到元素的索引


val list = listOf(1, 3, 5, 7, 9)list.forEachIndexed { index, value -> println("$index value is $value") }
//输入结果0 value is 11 value is 32 value is 53 value is 74 value is 9
复制代码

max

返回最大的一项,如果没有则返回 null


val list = listOf(1, 3, 5, 7, 9)println(list.max()) //9
复制代码

maxBy

根据给定的函数返回最大的一项,如果没有则返回 null


val list = listOf(1, 3, 5, 7, 9)println(list.maxBy { -it }) //1
复制代码

min

返回最小的一项,如果没有则返回 null


val list = listOf(1, 3, 5, 7, 9)println(list.min()) //1
复制代码

minBy

根据给定的函数返回最小的一项,如果没有则返回 null


val list = listOf(1, 3, 5, 7, 9)println(list.minBy { -it }) //9
复制代码

none

如果没有任何元素与给定的函数匹配,则返回 true


val list = listOf(1, 3, 5, 7, 9)println(list.none { it > 10 }) //true
复制代码

reduce

与 fold  一样,但是没有一个初始值。通过一个函数从第一项到最后一项进行累计


val list = listOf(1, 3, 5, 7, 9)    println(list.reduce { total, next ->        println("$next , $total")        total + next    }) 3 , 1 5 , 4 7 , 9 9 , 16 25
复制代码

reduceRight

与 reduce  一样,但是顺序是从最后一项到第一项


val list = listOf(1, 3, 5, 7, 9)    println(list.reduceRight { next, total ->        println("$next , $total")        total + next    })
7 , 9 5 , 16 3 , 21 1 , 24 25
复制代码

sumBy

返回所有每一项通过函数转换之后的数据的总和


val list = listOf(1, 3, 5, 7, 9)println(list.sumBy { it + 1 }) //30
复制代码

过滤操作符

drop

返回包含去掉前 n 个元素的所有元素的列表


val list = listOf(1, 3, 5, 7, 9)println(list.drop(2)) //[5, 7, 9]
复制代码

dropWhile

返回从第一个开始不符合给定函数的元素起之后的列表


val list = listOf(1, 3, 5, 7, 9, 2)println(list.dropWhile { it < 4 }) //第1、2元素不符合函数,故返回的列表时[5, 7, 9, 2]
复制代码

dropLastWhile

从最后一项开始,返回从开始不符合给定函数的元素起之后的列表


val list = listOf(10, 1, 3, 5, 7, 9)println(list.dropLastWhile { it > 4 }) //[10, 1, 3]
复制代码

filter

过滤所有符合给定函数条件的元素


val list = listOf(1, 3, 5, 7, 9, 2)println(list.filter { it < 4 }) //[1, 3, 2]
复制代码

filterNot

过滤所有不符合给定函数条件的元素


val list = listOf(1, 3, 5, 7, 9, 2)println(list.filterNot { it < 4 }) //[5, 7, 9]
复制代码

filterNotNull

过滤所有元素中不是 null 的元素


val list = listOf(1, 3, 5, 7, 9, 2, null)println(list.filterNotNull()) //[1, 3, 5, 7, 9, 2]
复制代码

slice

过滤一个 list 中指定 index 的元素


val list = listOf(1, 3, 5, 7, 9, 2, null)println(list.slice(listOf(0, 3))) //[1, 7]
复制代码

take

返回从第一个开始的 n 个元素


val list = listOf(1, 3, 5, 7, 9, 2, null)println(list.take(2)) //[1, 3]
复制代码

takeLast

返回从最后一个开始的 n 个元素


val list = listOf(1, 3, 5, 7, 9, 2, null)println(list.takeLast(2)) //[2, null]
复制代码

takeWhile

返回从第一个开始符合给定函数条件的元素


val list = listOf(1, 3, 5, -1, 7, 9, 2)println(list.takeWhile { it > 2 }) //[]第一个元素就不符合println(list.takeWhile { it > 0 }) //[1, 3, 5]
复制代码

映射操作符

flatMap

遍历所有的元素,为每一个创建一个集合,最后把所有的集合放在一个集合中


val list = listOf(1, 3, 5, -1, 7, 9, 2)println(list.flatMap { listOf(it, it + 1) }) //[1, 2, 3, 4, 5, 6, -1, 0, 7, 8, 9, 10, 2, 3]
复制代码

groupBy

返回一个根据给定函数分组后的 map


val list = listOf(1, 3, 5, -1, 7, 9, 2)    println(list.groupBy { listOf(it) }) //{[1]=[1], [3]=[3], [5]=[5], [-1]=[-1], [7]=[7], [9]=[9], [2]=[2]}    println(list.groupBy { listOf(it, it + 1) }) //{[1, 2]=[1], [3, 4]=[3], [5, 6]=[5], [-1, 0]=[-1], [7, 8]=[7], [9, 10]=[9], [2, 3]=[2]}
复制代码

map

返回一个每一个元素根据给定的函数转换所组成的 List。


val list = listOf(1, 3, 5, -1, 7, 9, 2)println(list.map { listOf(it) }) //[[1], [3], [5], [-1], [7], [9], [2]]println(list.map { listOf(it, it + 1) }) //[[1, 2], [3, 4], [5, 6], [-1, 0], [7, 8], [9, 10], [2, 3]]
复制代码

mapIndexed

返回一个每一个元素根据给定的包含元素 index 的函数转换所组成的 List


val list = listOf(1, 3, 5, -1, 7, 9, 2)println(list.mapIndexed { index, value -> index }) //[0, 1, 2, 3, 4, 5, 6]println(list.mapIndexed { index, value -> index * value }) //[0, 3, 10, -3, 28, 45, 12]
复制代码

mapNotNull

返回一个每一个非 null 元素根据给定的函数转换所组成的 List


val list = listOf(1, 3, 5, -1, 7, 9, null, 2)println(list.mapNotNull { it }) //[1, 3, 5, -1, 7, 9, 2]
复制代码

元素操作符

contains

如果指定元素可以在集合中找到,则返回 true


val list = listOf(1, 3, 5, -1, 7, 9, null, 2)println(list.contains(3)) //trueprintln(list.contains(13)) //false
复制代码

elementAt

返回给定 index 对应的元素,如果 index 数组越界则会抛出 IndexOutOfBoundsException


val list = listOf(1, 3, 5, -1, 7, 9, null, 2)println(list.elementAt(3)) //-1println(list.elementAt(6)) //null
复制代码

elementAtOrElse

返回给定 index 对应的元素,如果 index 数组越界则会根据给定函数返回默认值


val list = listOf(1, 3, 5, -1, 7, 9, null, 2)println(list.elementAtOrElse(3, { it * 2 }))  //-1println(list.elementAtOrElse(16, { it * 2 })) //越界,故返回32
复制代码

elementAtOrNull

返回给定 index 对应的元素,如果 index 数组越界则会返回 null


val list = listOf(1, 3, 5, -1, 7, 9, null, 2)println(list.elementAtOrNull(3))  //-1println(list.elementAtOrNull(16)) //null
复制代码

first

返回符合给定函数条件的第一个元素


val list = listOf(1, 3, 5, -1, 7, 9, 2)println(list.first { it % 3 == 0 })  //3
复制代码

firstOrNull

返回符合给定函数条件的第一个元素,如果没有符合则返回 null


val list = listOf(1, 3, 5, -1, 7, 9, 2)println(list.firstOrNull { it % 3 == 0 })  //3println(list.firstOrNull { it % 8 == 0 })  //null
复制代码

indexOf

返回指定元素的第一个 index,如果不存在,则返回 -1


val list = listOf(1, 3, 5, -1, 7, 9, 2)println(list.indexOf(5))  //2println(list.indexOf(12)) //-1
复制代码

indexOfFirst

返回第一个符合给定函数条件的元素的 index,如果没有符合则返回 -1


val list = listOf(1, 3, 5, 1, 7, 9, 2)println(list.indexOfFirst { it % 2 == 0 })   //6println(list.indexOfFirst { it % 12 == 0 })  //-1
复制代码

indexOfLast

返回最后一个符合给定函数条件的元素的 index,如果没有符合则返回 -1


val list = listOf(1, 3, 5, 6, 7, 9, 2)println(list.indexOfLast { it % 2 == 0 })   //6println(list.indexOfLast { it % 12 == 0 })  //-1
复制代码

last

返回符合给定函数条件的最后一个元素


val list = listOf(1, 3, 5, 6, 7, 9, 2)println(list.last { it % 2 == 0 })   //2println(list.last { it % 3 == 0 })   //9
复制代码

lastIndexOf

返回指定元素的最后一个 index,如果不存在,则返回 -1


val list = listOf(1, 3, 2, 6, 7, 9, 2)println(list.lastIndexOf(2))    //6println(list.lastIndexOf(12))   //-1
复制代码

lastOrNull

返回符合给定函数条件的最后一个元素,如果没有符合则返回 null


val list = listOf(1, 3, 2, 6, 7, 9, 2)println(list.lastOrNull { it / 3 == 3 })    //9println(list.lastOrNull { it == 10 })       //null
复制代码

single

返回符合给定函数的单个元素,如果没有符合或者超过一个,则抛出异常


val list = listOf(1, 9, 2, 6, 7, 9, 2)println(list.single { it % 7 == 0 })  //7println(list.single { it == 2 })      //IllegalArgumentException
复制代码

singleOrNull

返回符合给定函数的单个元素,如果没有符合或者超过一个,则返回 null


val list = listOf(1, 9, 2, 6, 7, 9, 2)println(list.singleOrNull { it % 7 == 0 })  //7println(list.singleOrNull { it == 2 })      //null
复制代码

生产操作符

partition

把一个给定的集合分割成两个,第一个集合是由原集合每一项元素匹配给定函数条 件返回 true 的元素组成,第二个集合是由原集合每一项元素匹配给定函数条件返回 false 的元素组成


val list = listOf(1, 9, 2, 6, 7, 9, 2)val (list1, list2) = list.partition { it % 2 == 0 }println(list1)  //[2, 6, 2]println(list2)  //[1, 9, 7, 9]
复制代码

plus

返回一个包含原集合和给定集合中所有元素的集合,因为函数的名字原因,我们可以使用 + 操作符


val list1 = listOf(1, 9, 2, 6, 7, 9, 2)val list2 = listOf(1, 2, 4, 6, 8, 10)println(list1.plus(list2)) //[1, 9, 2, 6, 7, 9, 2, 1, 2, 4, 6, 8, 10]println(list1 + list2)  //[1, 9, 2, 6, 7, 9, 2, 1, 2, 4, 6, 8, 10]
复制代码

zip

返回由 pair 组成的 List,每个 pair 由两个集合中相同 index 的元素组成。这个返回的 List 的大小由最小的那个集合决定


val list1 = listOf(1, 9, 2, 6, 7, 9, 2)val list2 = listOf(1, 2, 4, 6, 8, 10)val list3 = list1.zip(list2)println(list3.javaClass)println(list3.get(0).javaClass)println("${list3.get(0).first} , ${list3.get(0).second}")list3.forEach { println(it) }
复制代码


class java.util.ArrayListclass kotlin.Pair1 , 1(1, 1)(9, 2)(2, 4)(6, 6)(7, 8)(9, 10)
复制代码

unzip

从包含 pair 的 List 中生成包含 List 的 Pair


val list1 = listOf(Pair("leavesC", 1), Pair("leavesC_2", 2), Pair("leavesC_3", 3))val list2 = list1.unzip()println(list2.javaClass)println(list2.first)println(list2.second)
复制代码

顺序操作符

reverse

返回一个与指定 list 相反顺序的 list


val list1 = listOf(Pair("leavesC", 1), Pair("leavesC_2", 2), Pair("leavesC_3", 3))val list2 = list1.reversed()println(list2)      //[(leavesC_3, 3), (leavesC_2, 2), (leavesC, 1)]
复制代码

sort

返回一个自然排序后的 list


val list1 = listOf(2, 4, 1, 9, 5, 10)val list2 = list1.sorted()println(list2) //[1, 2, 4, 5, 9, 10]
val list3 = listOf("a", "c", "ab", "b", "cdd", "cda")val list4 = list3.sorted()println(list4) //[a, ab, b, c, cda, cdd]
复制代码

sortBy

返回一个根据指定函数排序后的 list


val list1 = listOf(2, 4, 1, 9, 5, 10)val list2 = list1.sortedBy { it - 3 }println(list2) //[1, 2, 4, 5, 9, 10]
复制代码

sortDescending

返回一个降序排序后的 List


val list1 = listOf(2, 4, 1, 9, 5, 10)val list2 = list1.sortedDescending()println(list2) //[10, 9, 5, 4, 2, 1]
复制代码

sortDescendingBy

返回一个根据指定函数降序排序后的 list


val list1 = listOf(2, 4, 1, 9, 5, 10)val list2 = list1.sortedByDescending { it % 2 }println(list2) //[1, 9, 5, 2, 4, 10]
复制代码


用户头像

还未添加个人签名 2020.10.09 加入

Android领域,打工人

评论

发布
暂无评论
Kotlin语法手册(二)