Java 8 Lambda 表达式

本博客关于JDK1.8新特性介绍的目录在这里,欢迎点击

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

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

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

语法
lambda 表达式的语法格式如下:

(parameters) -> expression
或
(parameters) ->{ statements; }

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

  • 可选类型声明: 不需要声明参数类型,编译器可以统一识别参数值
  • 可选的参数圆括号: 一个参数无需定义圆括号,但多个参数需要定义圆括号
  • 可选的大括号: 如果主体包含了一个语句,就不需要使用大括号
  • 可选的返回关键字: 如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值

以上是官网对jdk 1.8 lambda的特征描述。 早在年初的时候,就已经对java lambda表达式进行过初步的学习,不知道是不是个人问题,一直都有抗拒心理,“en,这个学起来好麻烦,好而且阅读性不好啦,第二个人都很难看懂”。

其实并不然,下面通过实例进行演示,更直观清晰。

Thread thread =  new Thread(new Runnable() {
		@Override
		public void run() {
			System.out.println("test-thread");
		}
});

引入lambda表达式后,则可以这么写

Thread thread = new Thread(() -> {System.out.println("test-thread");});

上述lambda表达式的语法:() -> {}(): 括号就是接口方法的括号,接口方法如果有参数,也需要写参数。只有一个参数时,括号可以省略。-> : 分割左右部分的,没啥好讲的。{} : 要实现的方法体。只有一行代码时,可以不加括号,可以不写return。

了解了lambda大概的样子我们继续往下看

 Consumer<String> consumer = (x) -> System.out.println(x);
 consumer.accept("test");
BinaryOperator<Integer> binary = (x, y) -> x + y;
System.out.println(binary.apply(1, 2));

在上面的表达 式中,我们注意到 (x, y)这里是没有申明方法的参数类型的,却能执行数学运算 +。
这里根据函数接口指定的泛型类为Integer,即可推断方法的参数为Integer,然后执行x + y。

示例就写到这了,比较三个代码块不难看出,lambda确实能显著减少代码量,提高开发效率,而且代码也很容易阅读。

总结

Lambda表达式是一个匿名方法,简化了匿名内部类的写法,把模板语法屏蔽,突出业务语句,传达的更像一种行为。
Lambda表达式是有类型的,JDK内置了众多函数接口
Lambda的3段式结构:(…)-> { …}

上述两个块分别介绍哦了一个参数和两个参数lambda的使用示例。
但是为什么这三个类可以使用lambda表达式呢?
我们自定义的接口是否可以使用lambda表达式吗?

带着疑问,我们移步函数式接口章节

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值