Kotlin的循环

- 第一种 闭区间 【1,10】
- 第二种 不包含10 【1, 10)
- 第三种 从10开始倒着循环到1,递减循环
- 第四种 【1,10】每次跳2步即 1、3、5、7、9 步进循环
- 第五种 重复函数10次
Kotlin集合操作符

- 一个数组
- map操作符的意思是,使用某种条件,将其每个元素进行转化,然后返回一个新的List
- filter增加过滤条件,去掉符合条件的数组,之后返回
- find增加条件,返回符合条件的数组
private fun listSign() {
val a = arrayOf("4", "0", "7", "i", "f", "w", "0", "9")
val index = arrayOf(5, 3, 9, 4, 8, 3, 1, 9, 2, 1, 7)
index
.filter {
it < a.size
}
.also {
println("result: $it")
}
.map {
a[it]
}
.also {
println("result: $it")
}
.reduce{s, s1 ->
"$s$s1"
}
.also {
println("result: $it")
}
}

作用域函数

private fun sysFun() {
val user = User("Jiayuanfa")
val letResult = user.let { mUser ->
"let::${mUser.javaClass}"
}
println(letResult)
val runResult = user.run {
"run::${this.javaClass}"
}
println(runResult)
}
- also与apply:使用场景
就是对某一个对象进行操作之后,可以直接对其进行链式操作
比如
user.also{ it ->
println(it)
}.apply{
println(this)
}.name
val alsoResult = user.also {
"alsoResult::${it.javaClass}"
}
println(alsoResult)
val applyResult = user.apply {
"applyResult::${this.javaClass}"
}
println(applyResult)

user.takeIf {
it.name.isNotEmpty()
}?.also {
println("姓名不为空")
}?: println("姓名为空值")
user.takeUnless {
it.name.isNotEmpty()
}?.also {
println("姓名为空")
}?: println("姓名为${user.name}")
repeat(5) {
println(user.name)
println(it)
}
常用的元素操作符
- contains 是否包含某个元素
- elementAt 返回对应下标的元素,越界会抛出错误 indexOutOfBounds
- firstOfNull与lastOfNull
private fun array() {
val arr = arrayOf("fage", "jiayuanfa", "jiayuanfa", "jia")
println("第一个符合条件的元素为:" + arr.firstOrNull {
it.contains("j")
})
println("最后一个符合条件的元素为:" + arr.lastOrNull {
it.contains("j")
})
}

- indexOf 返回指定元素的下标 没有返回-1
- sigleOfNull 返回符合条件的单个元素 如有没有符合或者超过一个,则返回Null



数据类 data class
Kotlin中的枚举类 也就是密闭类
package com.example.kotlindemo
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
class SealedActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
sealed(SuperCommand.A)
}
private fun sealed(superCommand: SuperCommand) {
when (superCommand) {
SuperCommand.A -> {
println("打印了A${SuperCommand.A.num}")
}
SuperCommand.B -> {
}
SuperCommand.C -> {
}
SuperCommand.D -> {
}
}
}
sealed class SuperCommand {
object A : SuperCommand() {
var num = 0
}
object B : SuperCommand()
object C : SuperCommand()
object D : SuperCommand()
}
}