美文网首页
kotlin重新复习

kotlin重新复习

作者: 陈桐Caliburn | 来源:发表于2020-04-08 09:19 被阅读0次

    温故知新

    将好的用法记录下来
    流水账式记录

    kotlin哲学
    实用、精简、安全

    原则:(DRY)
    Don`t Repeat Yourself

    表达主体

    fun max(a:Int, b:Int):Int = if(a>b) a else b
    

    var 变量
    val 不变量

    类和属性

    class Person(val name:String)
    

    任意对象使用when,用when代替复杂if

    is 类型监测,智能类型转换

    ranges

    val oneToTen = 1..10
    

    kotlin遍历几种写法

    in 检查范围

    异常处理 :try作为表达式

    fun readNum(reader:BufferedReader){
        var number  = try{
            Interger.parseInt(reader.readLine())
        }catch(e:Exception){
            return null
        }
        printlin(number)
    }
    

    list函数
    last()
    max()

    类扩展 :顶层属性扩展

    package strings
    fun String.lastChar():Char = get(length-1)
    

    kotlin调用

    var c = "abc".lastChar()
    

    java调用扩展函数

    char c = StringUtilKt.lastChar("abc")
    

    多态在kotlin中失效的

    可变参数
    vararg

    元组 pairs

    split

    "12.345-6.A".spilt(".".toRegex())
    

    kotlin接口: 带有默认实现方法

    open final abstract修饰符,默认final类型

    可见性
    public默认
    internal 模块内可见
    protected 子类可见
    private 类内部可见

    初始化类:主构造器和初始化器

    constructor
    init{

    }

    次构造器

    super(ctx)=>this(ctx)
    get()
    set(value:String)

    数据类

    data class Client(val name:String , val code :Int)
    

    copy 拷贝数据

    by类委托 减少大量不必要实现

    
    class DelegateCollection<T>(
        innerList:Conllection<T> = ArrayList<T>()
    ):Conllection<T> by innerList{}
    
    

    object 单例类
    无构造函数

    伴生对象:访问静态函数,静态成员

    class A{
    
        companion object{
              fun bar(){
              println("hello")
              }
        }
    
    }
    
    A.bar
    

    匿名内部类
    1、对象表达式
    object : Clickable{

    }

    2、 lambda

    lambda 应用
    1、集合

    var list =listOf(Person("a",12), Person("b",14))
    list.maxBy{ it.age }
    

    2、语法表达式


    语法表达式

    成员引用
    people::age

    filter 移除不想要函数
    map 对合集每个元素应用给定函数

    var people = listOf(Person("Alice",20),Person("Bob",31))
    people.filter{it.age > 30}
    output=>[Person("Bob",31)]
    
    var list = listOf(1,2,3,4)
    list.map{ it * it }
    [1,4,9,16]
    
    

    对集合应用预言,条件判定
    all 所有
    any 任意
    count 符合数量
    find 返回符合第一个

    var people = listOf(Person("Alice",20),Person("Bob",31))
    
    var canBe27 ={p:Person->p.age <=27}
    
    people.all(canBe27)
    people.any(canBe27)
    people.count(canBe27)
    people.find(canBe27)
    

    groupBy 一个将列表转化为多组映射

    var people = listOf(Person("Alice",20),Person("Bob",31),
    Person("Carol",31))
    
    //分组
    people.groupBy{it.age}
    

    flatMap 数据变换重新排列
    函数变换,多个列表合并一个集合

    val strings = listOf("abcc","deffggrr")
    println(strings.flatMap{it.toList()})
    
    [a, b, c, c, d, e, f, f, g, g, r, r]
    

    //转换为序列,数据量大时,会更高效
    sequence

    people.asSequence()  //转换为序列
                .map(Person::name)
                .filter{ it.startsWith("A")}
                .toList() //序列转换成列表
    

    优化,先用filter,后map

    with函数 建造者
    apply函数

    相关文章

      网友评论

          本文标题:kotlin重新复习

          本文链接:https://www.haomeiwen.com/subject/qgrzphtx.html