Lamdba表达式

Lamdba表达式

  1. lambda表达式允许把函数作为一个方法的参数;

  2. 使用lambda表达式可以使代码变得更加简洁紧凑

    lambda表达式使用的前提是实现的接口中只有一个必须要实现的方法

    在Java8中,接口中有通过default修饰的默认实现方法,即这个方法具有默认的实现,实现类可以按需要重写default方法

语法形式为 () -> {},其中 () 用来描述参数列表,{} 用来描述方法体,-> 为 lambda运算符 ,读作(goes to)

​ 可以参考这篇博文:https://www.cnblogs.com/haixiang/p/11029639.html#228891873

在lambda表达式中的一些省略写法:
  • ()中参数类型符可以省略;
  • ()中的参数如果只有一个,则可以将()省略;
  • 如果 { } 中只有一条语句,则可以将大括号省略
  • 如果{ }中,直接返回值则可以将return省略

lambda表达式可以指定一个普通方法来快速的实现接口中的抽象方法,但是要求两个方法的返回类型,输入参数类型和数量相同才可,其使用方法为:

  • 方法拥有者::方法名

静态方法的拥有者是这个类,而非静态方法的拥有者则是类的实例化对象

lamabda表达式可以很方便的用于实现接口的匿名内部类方法重写,典型的就是线程的创建;
pulic class Resolve{
    public static void main(String [] args) {
        Thread thread = new Thread (()->{
            for(int i=0;i<10;i++){
                System.out.println("i++");
            }
        });
        thread.start();
    }
}

//因为在实例化thread的时候,其构造方法中的参数是实现Runnable接口的类,而实现该接口必须重写其run方法,run方法的是无参数无返回值的,所以lambda形式即如上所示

lambda表达式也可以用于集合的遍历、排序和删除,能够使代码更简洁

  • 遍历集合的时候是借助于集合实现类的forEach()方法,其本质是在该方法中传入实现Consumer接口的实例对象,排序是借助sort(),删除是借助removeIf()方法传入实现Predicate接口的实例对象
  • 其实本质上还是通过lambda表达式来简易的创建实现接口的匿名内部类,并重写其中的方法;因为在必须实现这个接口的情形下,一些创建匿名内部类的代码确实是可以省略,而着重关注其重写的方法体和参数。
posted @ 2021-08-02 20:04  九鼎很难顶  阅读(95)  评论(0编辑  收藏  举报