01kotlin基础语法

koltin基础语法

1.函数基础知识

fun main() {
    println("Hello world")
    var value = sum1(3, 5)
    print(value)
}

//函数
fun sum(a: Int, b: Int): Int {
    return a + b
}

//函数lamada表达式
fun sum1(a: Int, b: Int) = a + b //lamada=会自动识别类型,如果块状

//unit返回无类型,与java中void等价,可以省略
fun printSum(a: Int, b: Int): Unit = println(a + b)

2.变量

package day1

//类中,f,g都是静态的
//val等价于 static final
//var等价于static
val F = 5
var g = 4

fun main(args: Array<String>) {
    //val对象不能修改,但对象内部的属性值可以修改
    val a: Int = 1
    val b: Int = 4
    val b2 = "wo de shijie"
    println(b2.replace("wo","nihao"))
    val c = 3;
    //var可修改
    var d = 5;
    print("$a" + "$b" + "$c" + "$d")
}
/* 注释从这里开始
/* 包含嵌套的注释 */
并且在这里结束。 */

3.条件表达式

//条件表达式
fun maxOf(a: Int, b: Int): Int {
    if (a > b) {
        return a
    } else {
        return b
    }
}

//改写
fun maxOf2(a: Int, b: Int): Int {
    return if (a > b) {
        a
    } else {
        b
    }
}

//改写
fun maxOf3(a: Int, b: Int) = if (a > b) a else b

4.类型检测与自动转换

package day1

fun main(args: Array<String>) {
    //判断是否可空
    var data: String? = null
    println(data)
}

//函数可空
fun sub(a: Int, b: Int): Int? = null;

fun sub2(a: Any): Int? {
    //判断成功之后,无须再判断
    return if (a is String) {
        a.length
    } else {
        null
    }
}

5.for循环

  1. for循环基本操作

    package day1
    
    fun main(args: Array<String>) {
        val items = listOf("apple", "banana", "kiwifruit")
        //for循环
    var index = 0
    while (index < items.size) {
        println("item at $index is ${items[index]}")
        index++
    }
        //第一种形式for循环
        for (item in items) {
            println(item)
        }
        println()
        //第二种形式for循环
        items.forEach { println(it) }
        println()
        //不执行后续,此时相当于continue
        items.forEach lit@{
            if (it.length == 6) return@lit
            println(it)
        }
        println()
        //不执行后续,此时相当于continue,等价于上面操作
        items.forEach {
            //不执行后续
            if (it.length == 6) return@forEach
            println(it)
        }
        println("开始")
        //如果不加标签,则直接退出
    //    items.forEach {
    //        //不执行后续
    //        if (it.length == 6) return
    //        println(it)
    //    }
        println("xxxx")
        items.forEach(fun(m) {
            if (m.length == 6) return
            println(m)
        })
    
        //break操作
        run Looper@{
            items.forEach {
                //不执行后续
                if (it.length == 6) return@Looper
                println(it)
            }
        }
    }
    
  2. 判断数据在不在集合中

        //判断a是不是再集合中
        //等价于
    //    if (mList.contains(a)) {
    //        System.out.println(a);
    //    }
        var a = 2;
        if (a in list1) {
            println(a)
        }
    
  3. key和value

    package day1
    
    fun main(args: Array<String>) {
        val items = listOf("apple", "banana", "kiwifruit")
        for (item in items) {
            println(item)
        }
        //下标
        for (position in items.indices) {
            println("$position" + items[position])
        }
        //下标和value
        for ((index, value) in items.withIndex()) {
            println("$index" + " $value")
        }
    }
    

6when表达式

package day1

fun main(args: Array<String>) {
    println(describe("xx"))
    var a=10
    var b = when(a){
        1-> "奔波儿霸"
        2-> "霸波儿奔"
        4,5-> "奔波儿霸和霸波儿奔"
        in 6 .. 10 -> "对的"
        else ->"错误"
    }
    //找到便break返回
    val items = listOf("apple", "banana", "kiwifruit")
    when {
        "banana" in items -> println("banana")
        "apple" in items -> println("apple is fine too")
    }
    println(b)
}

fun describe(obj: Any): String =
        when (obj) {
            1 -> "One"
            "Hello" -> "Greeting"
            is Long -> "Long"
            is String -> obj
            !is String -> "Not a string"
            else -> "Unknown"
        }

7 range区间

package day1

fun main(args: Array<String>) {
    val x = 10
    val y = 9
    if (x in 1..y + 1) { // 1到10
        println("fits in range")
    }
    if (x in 1 until y + 1) { // 1到9
        println("fits in range")
    }
    var num = 3
    if (num in 10 downTo 1 step 2) {
       println(num)
    }

    //检测某个数字是否在指定区间外:
    val list = listOf("a", "b", "c")
    if (-1 !in 0..list.lastIndex) {
        println("-1 is out of range")
    }
    if (list.size !in list.indices) {
        println("list size is out of valid list indices range, too")
    }
}

8.集合排序

package day1

fun main(args: Array<String>) {
    val fruits = listOf("banana", "avocado", "apple", "kiwifruit")
    var list2 = fruits
            .filter { it.startsWith("a") }
            .sortedBy { it }
            .map { it.toUpperCase() }
//            .forEach { println(it) }
    println(list2)

    fruits.sortedBy { it.first() }
            .forEach {
                println(it)
            }
    val list = listOf(1, 4, 2, 2)
//    println(list.sortedBy { -it })
    println(list.sorted()) // 只能升序, 等价于java中Collections.sort(mList);如果需要降序,需使用sortBy
    println(list.sortedDescending())// 倒叙
    var mlist = list.reversed(); // 反转
    println(mlist)

    test5()
}

fun test5() {
    val sortedValues = mutableListOf(
            1 to "a",
            2 to "b",
            6 to "c",
            5 to "e",
            3 to "c",
            4 to "d",
            7 to "a"
    )
    sortedValues.sortWith(compareBy({ it.first }, { it.second })) //以第一个为主
    println(sortedValues) // [(1, a), (2, b), (5, c), (7, c), (6, d), (6, e)]
}

9.集合非基本类型排序

package day1

import java.util.*
import kotlin.Comparator

data class Person(var name: String, var age: Int)

private val personList: MutableList<Person> = mutableListOf(
        Person("B", 2),
        Person("A", 2),
        Person("D", 1),
        Person("C", 3)
)

data class School(var name: String, var age: Int) : Comparable<School> {
    override fun compareTo(other: School): Int {
        return if (this.age == other.age) {
            this.name.compareTo(other.name)
        } else {
            other.age - this.age
        }
    }
}

//Comparable 与 Comparator :
// 两者的区别是实现Comparator接口代码更加灵活,可以定义某个类的多个比较器,
// 从而在排序时根据实际场景自由调用,而Comparable接口实现后便不能改动
class MyComparator : Comparator<School> {
    override fun compare(p1: School, p2: School): Int {
        return if (p1.age == p2.age) {
            p1.name.compareTo(p2.name)
        } else {
            p2.age - p1.age
        }
    }
}

private val schoolList: MutableList<School> = mutableListOf(
        School("B", 2),
        School("A", 2),
        School("D", 1),
        School("C", 3)
)

/**
 * 非基本类型,引用
 */
fun main(args: Array<String>) {
    personList.sortBy { it.name }    //升序
    println(personList)
    personList.sortByDescending { it.age }
    println(personList)

//先根据age 【升序】排列,若age相同,根据name【升序】排列
    personList.sortWith(compareBy({ it.age }, { it.name }))
    println(personList)
    personList.sortWith(
            //构造一个Comparator对象,完成排序逻辑:
            // 先按age【降序】排列,若age相同,则按name【升序】排列
            Comparator { o1, o2 ->  //只有一个方法时,可以省略,直接传递参数
                //o1,o2顺序,左边大自然排序升序,否则降序
                if (o2.age == o1.age) {
                    o1.name.compareTo(o2.name)
                } else {
                    o2.age - o1.age
                }
            }
    )
    println(personList)

    schoolList.sortWith(MyComparator())
    println(schoolList)
    //匿名方法
    schoolList.sortWith(Comparator(fun(o1: School, o2: School): Int {
        //o1,o2顺序,左边大自然排序升序,否则降序
        return if (o2.age == o1.age) {
            o1.name.compareTo(o2.name)
        } else {
            o2.age - o1.age
        }
    }))
    var comparato2 = Comparator(fun(o1: School, o2: School): Int {
        //o1,o2顺序,左边大自然排序升序,否则降序
        return if (o2.age == o1.age) {
            o1.name.compareTo(o2.name)
        } else {
            o2.age - o1.age
        }
    })
    var comparato3 = Comparator { o1: School, o2: School ->
        if (o2.age == o1.age) {
            o1.name.compareTo(o2.name)
        } else {
            o2.age - o1.age
        }
    }
    Collections.sort(schoolList, MyComparator())
    println(schoolList)
}

10.字符串比较

注意:在kotlin中,,=== 表示比较对象地址,== 表示比较两个值大小

package day1
data class Person2(var name: String, var age: Int)
fun main(args: Array<String>) {
    var a = "world"
    var b = "world"
    if (a == b) {

    }
    var p1 = Person2("zhangsan",21)
    var p2 = Person2("zhangsan",21)
    if (p1 == p2) {
        println("相等");
    }
    if (p1 === p2) {
        println("不相等");
    }
}

11.回调方法简化

package day1

//在lambda表达式,只支持单抽象方法模型,也就是说设计的接口里面只有一个抽象的方法,才符合lambda表达式的规则,多个回调方法不支持。
interface Listener{
}

12.字符串

package day1

const val str = """
    你好
    世界
    我来了
    不要说话
"""
fun main(args: Array<String>) {
    meth(null)
}
data class Person01(var name: String?, var age: Int)

fun meth(str: String?) {
    str.let {

    }
    var s: String? = null
    println(s ?: "xx")
    println(s)

    var p01 = Person01(null, 20)
    p01.name?.isEmpty();

    if (p01.name?.isEmpty()!!) {
        println(2)
    } else {
        println(3)
    }
}

13.公共属性

package day1

const val b = 3 //等价于java中 public static final int b = 3;
const val c = 4

fun method() {

}

data class Person01(var name: String?, var age: Int)

fun meth(str: String?) {
str.let {

}
var s: String? = null
println(s ?: "xx")
println(s)

var p01 = Person01(null, 20)
p01.name?.isEmpty();

if (p01.name?.isEmpty()!!) {
    println(2)
} else {
    println(3)
}

}


## 13.公共属性

```kotlin
package day1

const val b = 3 //等价于java中 public static final int b = 3;
const val c = 4

fun method() {

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值