【一看就懂】Lambda 表达式的语法格式

1 篇文章 0 订阅

为什么要引入lambda表达式

  • lambda可以简化代码,lambda 表达式是一个可传递的代码块,可以在以后执行一次或多次。
  • 当你想要代码块在以后某个时间点执行,可以使用lambda表达式。
  • lambda表达式可以被转换为函数式接口。
  • lambda表达式可以在闭包作用域中有效的访问final变量。
  • 方法和构造器引用可以引用方法或构造器,但无需调用他们。

Lambda 表达式的基础语法:Java8引入了一个新的操作符“->”,该操作符称为箭头操作符或Lambda操作符。该操作符将Lambda表达式拆分为两个部分:

左侧:Lambda 表达式的参数列表
右侧:Lambda表达式中所需执行的功能,即为Lambda体
() -> System.out.println(“Lambda!”);

语法格式一:无参数,无返回值

此处用Runnable接口举例子,此接口只有一个无参数run()方法。

public void fun1() {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                System.out.println("hello,world");
            }
        };
        r.run();

        Runnable r1 = () -> System.out.println("接口方法无参数,无返回值");
        r1.run();
    }
语法格式二:有一个参数(此时小括号可以省略),无返回值

(x) -> System.out.println(x);
x -> System.out.println(x);
接口Consumer,包含方法:void accept(T t);

public void fun2() {
    Consumer<String> consumer = x -> System.out.println(x);
    consumer.accept("接口只有一个参数,无返回值");
}
语法格式三:有多个参数,有返回值,并且Lambda体有多条执行语句。

接口Comparator,包含方法:int compare(T o1, T o2)

public void fun3() {
    Comparator<Integer> comparator = (x, y) -> {
        System.out.println("x - y = ?");
        return Integer.compare(x, y);
    };
    int compare = comparator.compare(2, 3);
    System.out.println(compare);
}
语法格式四:Lambda体只有一条语句,return和花括号都可以省略如果花括号省略,return一定要省略
public void fun4() {
    Comparator<Integer> comparator = (x, y) -> Integer.compare(x, y);
    int compare = comparator.compare(2, 3);
    System.out.println(compare);
}
语法格式五:Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器可以通过上下文推断出数据类型。

Lambda表达式需要函数式接口的支持。
函数式接口:即接口中只有一个抽象方法的接口。在接口类使用注解@FunctionalInterface修饰,可以检查是否是函数式接口。

方法引用与构造器引用

如果Lambda表达式的代码块只有一条代码,可以在代码块中使用方法引用构造器引用

种类示例说明对应的Lambda表达式
引用类方法类名::类方法函数式接口中被实现的全部参数传给该类方法做为参数(a,b,…)-> 类名.类方法(a,b,…)
引用特定对象的实例方法特定对象::实例方法函数式接口中被实现的全部参数传给该类方法做为参数(a,b,…)-> 特定对象.实例方法(a,b,…)
引用某类对象的实例方法类名::实例方法函数接口中被实现的方法的第一个参数作为调用者,后面的参数全部传给该方法作为参数(a,b,…)-> a.实例方法(b,…)
引用构造器类名::new函数式接口中被实现方法的全部参数传给该构造器作为参数(a,b,…)-> new 类名(a,b,…)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值