目录
1.Kotlin语言的takeUnless内置函数
// TODO 55 Kotlin语言的takeUnless内置函数
// takeIf 和 takeUnless 功能是相反的
// name.takeIf {true / false} true : 返回name本身,false返回null
// name.takeUnless{true / false} false : 返回name本身,true返回null
class Manager{
private var infoValue : String ?= null
fun getInfoValue()/* : String? */ = infoValue
fun setInfoValue(infoValue : String){
this.infoValue = infoValue
}
}
fun main() {
val manager = Manager()
manager.setInfoValue("AAA")
//小结:takeUnless+it.isNullOrBlank()一起使用,可以验证字符串有没有初始化
val r = manager.getInfoValue().takeUnless { it.isNullOrBlank() } ?: "未进行初始化"
println(r)
}
2.Kotlin语言的List创建与元素获取学习
// TODO 56 Kotlin语言的List创建与元素获取学习
// 普通取值方式: 索引
// 防止崩溃取值方式: getOrElse getOrNull
fun main() {
val list = listOf("Bxb","ZhangSan","Lisi","Wangwu")
//普通取值方式
println(list[0])
println(list[1])
println(list[2])
println(list[3])
println()
//我们写KT代码,一定不会出现,空指针异常,下标越界异常
//防止崩溃方式,getOrElse getOrNull
println(list.getOrElse(3) { "你越界了0" })
println(list.getOrElse(4) { "你越界了1" })
println(list.getOrElse(5) { "你越界了2" })
println()
println(list.getOrNull(1))
println(list.getOrNull(4))
println(list.getOrNull(111))
//getOrNull + 空合并操作符
println(list.getOrNull(222) ?: "你越界了3")
//小结:开发过程中,尽量使用getOrElse 或者 getOrNull,才能体现KT的两点
}
3.Kotlin语言的可变List集合学习
// TODO 57 Kotlin语言的可变List集合学习
// 可变的集合
// 不可变集合 to 可变集合
// 可变集合 to 不可变集合
fun main() {
//可变的集合
val list = mutableListOf("Bxb","Zhangsan","Wangwu")
//可变的集合,可以完成可变的操作
list.add("赵六")
list.remove("Wangwu")
println(list)
// 不可变集合 to 可变集合
val list2 = listOf(123,456,789)
//不可变的集合,无法完成可变的操作
val list3 : MutableList<Int> = list2.toMutableList()
//可变的集合,可以完成可变的操作
list3.add(111)
list3.remove(123)
println(list3)
//可变集合 to 不可变集合
val list4 : MutableList<Char> = mutableListOf('A','B','C')
//可变的集合,可以完成可变的操作
list4.add('Z')
list4.remove('A')
println(list4)
//可变集合转变为不可变集合
val list5 : List<Char> = list4.toList()
}
4.Kotlin语言的mutator学习
// TODO 58 Kotlin语言的mutator学习
//mutator 变化,改变
//1.mutator += -= 操作
//2.removeIf
fun main() {
//1.mutator += -= 操作
val list : MutableList<String> = mutableListOf("Bxb","BxbAll","BxbStr","Zhangsan")
list += "李四"
list += "王五"
list -= "Bxb"
println(list)
//2.removeIf
//list.removeIf{ true } 如果是true 自动遍历整个可变集合,进行一个元素一个元素的删除
list.removeIf{ it.contains("Bxb")} //过滤所有的元素,只要有 Bxb 的元素,就是true 删除
println(list)
}
5.Kotlin语言的List集合遍历学习
// TODO 59 Kotlin语言的List集合遍历学习
fun main() {
val list = listOf(1, 2, 3, 4, 5, 6)
println(list) //输出list详情,这个不是遍历集合
//第一种 遍历方式:
for (i in list){
print("元素:$i ")
}
println()
//第二种 遍历方式:
list.forEach{
//it == 每一个元素
print("元素:$it ")
}
println()
//第三种 遍历方式
list.forEachIndexed { index, item ->
print("下标:$index,元素:$item ")
}
}
6.Kotlin语言的解构语法过滤元素学习
// TODO 60 Kotlin语言的解构语法过滤元素学习
//1.集合配合解耦语法
//2.反编译看Java给三个变量赋值的代码
//3.解构屏蔽接收值
fun main() {
val list: List<String> = listOf("张三", "李四", "王五")
val (value1, value2, value3) = list
println("value1:$value1,value2:$value2,value3:$value3")
var (v1, v2, v3) = list
v1 = "ok"
println("v1:$v1,v2:$v2,v3:$v3")
//用_内部可以不接受赋值,可以节约一点性能
val (_, n2, n3) = list
//_ 不是变量名,是用来过滤解构赋值的,不接收赋值给我
println("n2:$n2,n3:$n3")
}
7.Kotlin语言的Set创建与元素获取
// TODO 60 Kotlin语言的Set创建与元素获取
//1.set 定义 不允许重复
//2.普通方式elementAt 会越界崩溃
//3.elementAtOrElse elementAtOrNull
fun main() {
val set: Set<String> = setOf("123","456","123","789")
println(set)
//set[0] 没有这样的功能 去Set集合元素
println(set.elementAt(0))
println(set.elementAt(1))
println(set.elementAt(2))
println()
//使用list 或 set 集合,尽量使用此方式,防止越界崩溃异常
println(set.elementAtOrElse(0) { "越界了lelele" })
println(set.elementAtOrElse(100) { "越界了lelele" })
println(set.elementAtOrNull(0))
println(set.elementAtOrNull(111))
//OrNull + 空合并操作符 一起使用
println(set.elementAtOrNull(88) ?: "yueyueyueyueyue")
}
8.Kotlin语言的可变Set集合
// TODO 62 Kotlin语言的可变Set集合
fun main() {
val set : MutableSet<String> = mutableSetOf("123","456")
set += "147"
set += "258"
set -= "456"
set.add("bxb")
set.remove("123")
println(set)
}
9.Kotlin语言的集合转换与快捷函数学习
// TODO 63 Kotlin语言的集合转换与快捷函数学习
//1.定义可变list集合
//2.List转Set 去重
//3.List转Set 转 List 也能去重
//4.快捷函数去重 distinct
fun main() {
val list : MutableList<String> = mutableListOf("bxb","bxb","bxb","www","wuwuwu") //list 可以重复元素
println(list)
//List 转 Set 去重
val set = list.toSet()
println(set)
//List转Set 转 List 也能去重
val set2 = list.toSet().toList()
println(set2)
//快捷函数去重distinct
println(list.distinct()) //内部做了:先转变成 可变的 Set 集合 再转换成 List 集合
println(list.toMutableSet().toSet()) //和上面代码等价
}
10.Kotlin语中的数组类型
// TODO 64 Kotlin语中的数组类型
fun main() {
//1.intArrayOf 常规操作的越界崩溃
val intArray = intArrayOf(1,2,3,4,5)
println(intArray[0])
println(intArray[1])
println(intArray[2])
println()
//2.elementAtOrElse elementAtOrNull
println(intArray.elementAtOrElse(0) { -1 })
println(intArray.elementAtOrElse(100) { -1 })
println(intArray.elementAtOrNull(0))
println(intArray.elementAtOrNull(200))
//OrNull + 合并空操作符 一起来使用
println(intArray.elementAtOrNull(200) ?: "你越界了")
println()
//3.List集合转 数组
val charArray = listOf('A','B','C').toCharArray()
println(charArray)
//4.arrayOf Array<File>
val objArray = arrayOf(File("aaa"),File("bbb"))
println(objArray)
}