Java lambda表达式和方法引用详解 (快速上手)

lambda表达式

前言

函数式接口简介

函数式接口是仅包含一个抽象方法的接口,这个方法表明了这个接口的用途,通常表示单个动作

  • 例如 Runnable 是函数式接口,仅有一个方法 run()
  • 可以在函数式接口中指定 Object 类的公有方法
  • 函数式接口可以有其他默认方法

简介

lambda 表达式本质上是一个匿名(没有名字的)方法

  • 这个方法不是独立的,是用于实现一个函数式接口中定义的方法
  • lambda 表达式会生成一个匿名类,lambda表达式也被称为闭包

lambda 表达式的返回类型即为它实现的抽象方法所返回的类型,只能用于已经被指定类型的代码环境中

1 简单 lambda表达式

1.1 基本概念

lambda表达式引入了一种新的 Java 操作符: ->
它被称为 lambda操作符 或 箭头操作符

它的左侧指定了 lambda 表达式需要的参数
它的右侧指定了 lambda 体,即 lambda表达式要执行的动作
Java 定义了两种 lambda体。一种只包含单独的一个表达式,一种包含一个代码块,下面将先介绍第一种

1.2 表达式 lambda (lambda体只包含一个表达式)

lambda表达式不能独立执行,它的目的是实现一个函数式接口中的抽象方法。只有在定义了 lambda表达式类型的上下文中,才能使用该表达式。所以要想使用 lambda表达式,就必须先有函数式接口。下面是一个简单的例子。

  1. 先定义一个自己的函数式接口
//定义一个自己的函数式接口,用于对两个数进行计算
public interface MyCalculator {
   
    double calculate(double a, double b);
}
  1. 创建一个 MyCalculater 类型的引用,创造定义了 lambda表达式类型的上下文,以使用 lambda表达式
MyCalculator calculator;
calculator = (a, b) -> a + b;
  • -> 左边括号内对应接口内 calculate(double a, double b)的两个参数
  • -> 右边的表达式则为 calculate 的实现
  1. 随后调用 calculate方法来获取计算结果
System.out.println(calculator.calculate(30, 6));
  • 控制台将输出 36.0
  1. 完整的例子
        MyCalculator plus = (a, b) -> a + b;
        System.out.println(plus.calculate(30,6));
        MyCalculator sub = (a, b) -> a - b;
        System.out.println(sub.calculate(30,6));
        MyCalculator mul = (a, b) -> a * b;
        System.out.println(mul.calculate(30,6));
        MyCalculator div = (a, b) -> a / b;
        System.out.println(div.calculate(30,6));
  • 控制台将输出 36.0 24.0 180.0 5.0

注意事项

  • -> 左边的参数必须匹配要实现方法的形参
    • 参数数量必须相等,Java将自动匹配类型
  • -> 右边表达式的类型必须和要实现方法的返回类型兼容
  • 只有一个参数时可以省略括号 如 n -> n+1;
  • 可以为参数指定类型,但是指定的类型必须和实现方法的形参兼容
    • (int a, int b) -> a+b;
    • (int a, b) -> a+b;是非法的,只要为一个参数指定了类型,那么就必须为所有参数都指定类型
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值