动力节点首页 全国咨询热线:400-8080-105

绑定手机号,登录
手机号

验证码

微信登录
手机号登录
手机号

验证码

微信登录与注册
微信扫码登录与注册

扫码关注微信公众号完成登录与注册
手机号登录
首页 > 文章

Java8新特性之Lambda表达式

05-12 10:31 780浏览
举报 T字号
  • 大字
  • 中字
  • 小字

Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。Lambda表达式作为Java 8中一个重要的新特性,它允许将函数作为参数进行传递(函数式编程),能够极大的简洁代码,在Java 8中扮演着举足轻重的角色,发挥着独一无二的作用。

lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。lambda表达式还增强了集合库。Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及 java.util.stream 包。流(stream)就如同迭代器(iterator),但附加了许多额外的功能。总的来说,lambda表达式和stream是自Java语言添加泛型(Generics)和注解(annotation)以来最大的变化。

Lambda表达式使你可以封装行为的单个单元,并将其传递给其他代码。如果要在集合的每个元素上执行特定操作,流程完成或流程遇到错误时,可以使用lambda表达式。以下功能支持Lambda表达式:

1.方法引用是紧凑的,易于阅读的lambda表达式,用于具有名称的方法。

2.默认方法使你可以向库的接口添加新功能,并确保与为这些接口的较早版本编写的代码二进制兼容。它们是接口方法,default在方法签名的开头具有实现和关键字。另外,你可以在接口中定义静态方法。

3.利用Java SE 8中的Lambda表达式和流的新的和增强的API描述了利用Lambda表达式和流的新的和增强的类。

Java 8引入Lambda表达式,使代码更加简洁。当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。下面这个例子就是使用Lambda语法来代替匿名的内部类,代码不仅简洁,而且还可读。

没有使用Lambda的老方法:

Runnable runnable1=new Runnable(){
@Override
public void run(){
    System.out.println("Running without Lambda");
}
};

使用Lambda:

Runnable runnable2=()->System.out.println("Running from Lambda");

正如你所看到的,使用Lambda表达式不仅让代码变的简单、而且可读、最重要的是代码量也随之减少很多。然而,在某种程度上,这些功能在Scala等这些JVM语言里已经被广泛使用。

lambda最重要的一点是延迟执行,毕竟如果要立即执行代码的话,完全没有必要写再lambda表达式中。超过3行的逻辑就不适用Lambda表达式了。虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能。但是建议不要乱用lambda,因为这就和某些很高级的黑客写的代码一样,简洁但是信息量太大,难以调试,会给维护人员带来大量的工作量。

由此可见,尽管lambda表达式很大程度上简化了Java代码,但lambda表达式实际上是一把双刃剑,让你用更少的代码实现同样的功能的同时,也会给代码的维护带来麻烦。我们可以在动力节点在线的Java SE教程中学习lambda表达式,学会合理使用lambda表达式。

0人推荐
共同学习,写下你的评论
0条评论
代码小兵498
程序员代码小兵498

153篇文章贡献528999字

相关课程 更多>

作者相关文章更多>

推荐相关文章更多>

Java面试题及答案整理

提枪策马乘胜追击04-21 20:01

Spring常见面试题

代码小兵92504-17 16:07

Java零基础实战项目——五子棋

代码小兵98804-25 13:57

Java string类详解

杨晶珍05-11 14:54

6道经典算法面试题

杨晶珍05-12 16:39

发评论

举报

0/150

取消