Java Lambda表达式

1、Lambda 表达式

        Lambda 表达式(Lambda expression) 是一个匿名函数,基于数学中的 λ 演算得名,也可称为闭包(Closure)。现在很多语言都支持 Lambda 表达式, 如 C++,C#,Java,Python 和 JavaScript 等。
        Lambda 表达式是推动 Java 8 发布的重要新特性,它允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

Java 引入 Lambda, 改善了集合操作(引入 Stream API)。
Lambda 表达式语法如下:

(参数列表)->{
	Lambda表达式体
}

->被称为箭头操作符或 Lambda 操作符, 箭头操作符将 Lambda 表达式拆分成两个部分:

  • 左侧: Lambda 表达式的参数列表.
  • 右侧: Lambda 表达式中所需执行的功能, 用{}包起来,即 Lambda体。

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

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
1.1、优点
  1. 代码简洁, 开发迅速.
  2. 方便函数式编程.
  3. 非常容易进行并行计算.
1.2、缺点
  1. 代码可读性差.
  2. 在非并行计算中,很多计算未必有传统的 for 性能要高.

2、函数式接口

        Lambda 表达式实现的接口不是普通的接口,而是函数式接口。如果一个接口中,有且只有一个抽象的方法 (Object类中的方法不包括在内),那这个接口就可以被看做是函数式接口。这种接口只能有一个方法。如果接口中声明了多个参数方法,那么 Lambda 表达式会发生如下编译错误:

The target type of this expression must be a functional interface

        这说明该接口不是函数式接口,为了防止在函数式接口中声明多个抽象方法,Java 8 提供了一个声明函数式接口的注解@FunctionalInterface, 如下所示:

@FunctionalInterface
public interface func{
	// 计算两个 int 数值
	int func(int a, int b);
}

        在接口之前使用 @FunctionalInterface 注解修饰,那么试图增加一个抽象方法时会发生编译错误。@FunctionalInterface 注解与@Override注解的作用类似。Java 8 中专门为函数式接口引入了一个新的注解 @FunctionalInterface。该注解可用于一个接口定义上,一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且只有一个抽象方法,否则将会报错。需要注意的是,即使不使用该注解,只要满足函数式接口的定义, 这仍然是一个函数式接口,使用起来都一样。

注意
        Lambda 表达式是一个匿名方法代码,Java 中的方法必声明在类或者接口中,那么 Lambda 表达式所实现的匿名方法是在函数式接口中声明的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值