Java 8 Lambda 表达式

本文深入解析Java8中的Lambda表达式,展示其如何简化代码,提高开发效率。通过对比传统匿名内部类,说明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表达式吗?

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

### Java 8 Lambda表达式的使用 Java 8 Lambda表达式可以用于简化代码,特别是在处理函数式接口时。函数式接口是指只包含一个抽象方法的接口。Lambda表达式可以作为参数传递给方法,或者赋值给函数式接口类型的变量。在将匿名类转换成函数式代码时,可借助Netbeans IDE,它对Java 8支持良好,会及时给出提示,跟着提示就能较容易地完成转换[^2]。 ### Java 8 Lambda表达式的特性 - **简洁性**:Lambda表达式可以让代码更加简洁,避免了使用匿名内部类时的繁琐语法。 - **函数式编程**:支持函数式编程范式,使得代码更具可读性和可维护性。 - **延迟执行**:Lambda表达式可以在需要的时候才执行,实现延迟执行的效果。 ### Java 8 Lambda表达式的示例 Lambda表达式有几种不同的语法形式: - `(params) -> expression`:当Lambda表达式只包含一个表达式时,可以省略花括号和`return`语句。 - `(params) -> statement`:当Lambda表达式只包含一条语句时,也可以省略花括号。 - `(params) -> { statements }`:当Lambda表达式包含多条语句时,需要使用花括号,并且如果有返回值,需要显式使用`return`语句。 以下是一些具体的示例代码: ```java import java.util.Arrays; import java.util.List; // 示例1:使用Lambda表达式实现Runnable接口 class LambdaExample { public static void main(String[] args) { // 传统的匿名内部类方式 Thread t1 = new Thread(new Runnable() { @Override public void run() { System.out.println("传统方式:线程正在运行"); } }); t1.start(); // 使用Lambda表达式 Thread t2 = new Thread(() -> System.out.println("Lambda方式:线程正在运行")); t2.start(); // 示例2:使用Lambda表达式遍历列表 List<String> list = Arrays.asList("apple", "banana", "cherry"); // 传统的for-each循环 for (String fruit : list) { System.out.println("传统方式遍历:" + fruit); } // 使用Lambda表达式和forEach方法 list.forEach(fruit -> System.out.println("Lambda方式遍历:" + fruit)); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值