Lambda编程

84 阅读1分钟

什么是Lambda

  • 调用一个函数,函数的参数是一个函数,这个函数可以动态修改
  • 接口的方式,也就是回调
  • 例如View的onClickListener方法,本质是一个可以稍后处理的onClick方法
  • 参数是函数的、或者返回值是函数的都叫做高阶函数
  • 函数当做参数传递给一个变量,需要添加 :: 这种写法叫做函数引用,添加之后不表示函数,表示一个对象,和函数一样具有相同功能

  • 对象不是函数,只是复制了函数的功能

创建一个函数的对象的三种方式

  • :: + 函数名
  • 匿名函数
  • Lambda

Java1.8之后加入

集合的创建与遍历

固定大小的数组初始化使用listOf函数代替arrayList

```val list = ArrayList<String>()
    list.add("Apple")
    list.add("Banana")
    list.add("Orange")
    list.add("Pear")
    list.add("Grape")        
val list1 = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
val list2 = mutableListOf("Apple", "Banana", "Orange", "Pear", "Grape")```
list1.forEach {
        println(it)
    }

HashMap

val map = HashMap<String, Int>()
        map["Apple"] = 1
        map["Banana"] = 2

        val map1 = mapOf("Apple" to 1, "Banana" to 2)
        for((name, index) in map1) {
            println("$name$index")
        }

找出数组中长度最长的元素

val list1 = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
        val listMaxLength = list1.maxBy { it.length }

映射为一个新的集合

val list1 = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
        val list2 = list1.map { it.toUpperCase(Locale.ROOT) }

过滤

val list1 = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
        val list2 = list1.map { it.toUpperCase(Locale.ROOT) }

        val list3 = list1.filter {
            it.length <= 5
        }.map {
            it.toUpperCase(Locale.ROOT)
        }

any 至少存在一个满足条件 all 所有都满足条件

val list1 = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
        val anyResult = list1.any{
            it.length <= 5
        }
        val allResult = list1.all {
            it.length <= 5
        }

Java函数式API与kotlin转换

private void newThread() {
        new Thread(new Runnable() {
            @Override
            public void run() {

            }
        }).start();
    }
    
Thread{

        }.start()