JDK8新特性-Lambda

JDK8新特性-Lambda

说明

Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。

Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

使用 Lambda 表达式可以使代码变的更加简洁紧凑。

相关概念

Lambda表达式只和函数式接口有关

Lambda表达式用于取代函数式接口的实现类及其方法

函数式接口

参考:《函数式接口 - 前度刘郎 - 博客园

有且仅有一个抽象方法的接口称为“函数式接口”。

这个条件决定了Lambda中,为什么我们能够直接在“->”后面写的内容就认为是重写的内容,因为假设有多个抽象方法,我哪知道“->”后面的这些代码是属于哪个方法的呢?

虚拟机会自动识别函数式接口,但是最好加上@Functional Interface注解防止他人添加方法。Java中的Lambda无法单独出现,它需要一个函数式接口来盛放,Lambda表达式方法体其实就是函数接口的实现。

这是一个函数式接口的典型例子:

package java.lang;

@FunctionalInterface
public interface Runnable {
    public abstract void run();
}

特征

以下是lambda表达式的重要特征:

  • **可选类型声明:**不需要声明参数类型,编译器可以统一识别参数值。

  • **可选的参数圆括号:**一个参数无需定义圆括号,但多个参数需要定义圆括号。

  • **可选的大括号:**如果主体包含了一个语句,就不需要使用大括号。

  • **可选的返回关键字:**如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

特征的意思大概是,完整体的Lambda表达式有类型声明、圆括号、大括号、返回关键字等内容,它们在特定的情况下都是可以省略的,还是看例子比较实际

使用场景

凡是需要实现函数式接口的类都可以用lambda来代替

还是拿Runnable举例:

new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("正常处理匿名内部类");
    }
}).start();
//简化后
new Thread(() -> System.out.println("Lambda实现")).start();

哪些特征在什么情况下能可选/省略

1、省略参数

上述例子中,Runnable接口的run()方法没有参数,所以new Thread里面的()不用写参数;

2、单一参数时省略参数类型和圆括号

image-20210625175840591

3、大括号省略

如果主体包含了一个语句,就不需要使用大括号。,参考2中的截图。

4、省略返回关键字

如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

@Test
void test2() {
    //只有一个表达式的时候,大括号可以省略
    RobotEntity.withReturnDaoAction(() -> 1000);
    //只有一个表达式的时候,大括号可以省略
    RobotEntity.withReturnDaoAction(() -> LambdaTests.cal());
    //多个表达式时,用return
    RobotEntity.withReturnDaoAction(() -> {
        System.out.println();
        return 2000;
    });
}

参考:

深入理解Java双冒号(::)运算符的使用

Java Lambda 表达式 | 菜鸟教程 https://www.runoob.com/java/java8-lambda-expressions.html

fanyang_china/article/details/87798829)》

Java Lambda 表达式 | 菜鸟教程 https://www.runoob.com/java/java8-lambda-expressions.html

《Java8 lambda/方法引用》 https://blog.csdn.net/White_i/article/details/108836987

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值