Java系列JDK 1.8 新特性之 Lambda表达式.pdf
Lambda是一个匿名函数,我们可以将Lambda表达式理解为一段可以传递的代码(将代码像数据一样传递)。使用它可以写出简洁、灵活的代码。作为一种更紧凑的代码风格,使java语言表达能力得到提升。 1、Lambda表达式介绍 2、从匿名类到Lambda转换 3、Lambda表达式 六种语法格式 语法格式一:无参数、无返回值,只需要一个Lambda体 语法格式二:lambda有一个参数、无返回值 语法格式三:Lambda只有一个参数时,可以省略() 语法格式四:Lambda有两个参数时,并且有返回值 语法格式五:当Lambda体只有一条语句的时候,return和{}可以省略掉 语法格式六:类型推断:数据类型可以省略,因为编译器可以推断得出,成为“类型推断” ### Java系列JDK 1.8 新特性之 Lambda表达式 #### 1、Lambda表达式介绍 Lambda表达式是Java 8中引入的一个重要新特性,它允许开发者以一种更加简洁的方式编写函数式接口实现代码。Lambda表达式本质上是一个匿名函数,能够作为一个参数传递给方法调用或存储在变量中,这使得Java支持了更高层次的函数式编程概念。 Lambda表达式的引入极大地简化了Java代码,使其变得更加简洁和易读。通过使用Lambda表达式,可以减少大量的样板代码(例如匿名内部类),并使代码更易于理解和维护。下面是一些Lambda表达式的基本概念: - **匿名性**:Lambda表达式是一种匿名函数,它不需要定义名称,可以直接作为参数传递或者赋值给变量。 - **可传递性**:由于Lambda表达式是匿名的,因此可以将其作为参数传递给其他方法,或者将其作为另一个方法的结果返回。 - **简洁性**:Lambda表达式通常比传统的实现方式(如匿名内部类)更为简洁,减少了代码量,提高了开发效率。 #### 2、从匿名类到Lambda转换 在Java 8之前,为了实现函数式接口(只有单一抽象方法的接口),开发者常常会使用匿名内部类来实现这些接口。这种方式虽然可行,但代码冗余且不易阅读。Lambda表达式的出现使得这种转换变得简单而直观: ```java // 使用匿名内部类 Thread thread1 = new Thread(new Runnable() { @Override public void run() { System.out.println("Hello from anonymous class"); } }); // 使用Lambda表达式 Thread thread2 = new Thread(() -> System.out.println("Hello from Lambda expression")); ``` #### 3、Lambda表达式 六种语法格式 Lambda表达式的语法非常灵活,以下列举了Lambda表达式的六种基本语法格式: ##### 语法格式一:无参数、无返回值,只需要一个Lambda体 此格式适用于没有参数且无需返回任何值的情况。例如: ```java Runnable r = () -> System.out.println("Hello"); r.run(); ``` ##### 语法格式二:lambda有一个参数、无返回值 当Lambda表达式接受一个参数且无需返回值时,可以采用此格式。例如: ```java Consumer<String> consumer = (String s) -> System.out.println(s); consumer.accept("Hello"); ``` 注意,在某些情况下,如果参数只有一个,可以省略括号。 ##### 语法格式三:Lambda只有一个参数时,可以省略() 当Lambda表达式只有一个参数时,可以省略参数的括号,使代码更加简洁。例如: ```java Function<String, String> function = s -> s.toUpperCase(); System.out.println(function.apply("hello")); // 输出 "HELLO" ``` ##### 语法格式四:Lambda有两个参数时,并且有返回值 当Lambda表达式需要两个参数并返回一个值时,可以采用此格式。例如: ```java BinaryOperator<Integer> operator = (x, y) -> x + y; int result = operator.apply(10, 20); System.out.println(result); // 输出 30 ``` ##### 语法格式五:当Lambda体只有一条语句的时候,return和{}可以省略掉 如果Lambda体只包含一条语句,则可以省略`{}`和`return`关键字。例如: ```java Predicate<Integer> predicate = i -> i > 10; System.out.println(predicate.test(20)); // 输出 true ``` ##### 语法格式六:类型推断:数据类型可以省略,因为编译器可以推断得出,成为“类型推断” Lambda表达式的参数类型可以省略,因为Java编译器可以通过上下文进行类型推断。例如: ```java List<String> list = Arrays.asList("apple", "banana", "cherry"); list.sort((s1, s2) -> s1.compareTo(s2)); System.out.println(list); // 输出 [apple, banana, cherry] ``` 通过上述六种语法格式,可以看出Lambda表达式的灵活性和简洁性,这对于提高Java代码的质量和开发效率非常有益。























剩余6页未读,继续阅读




- 粉丝: 7693
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- Java语言字符串前补零和后补零的快速方法
- 基于RRT与自重构技术的UAV编队避障与动态队形调整研究 · RRT
- 基于Simulink的单轮车辆ABS防抱死控制系统仿真模型及其应用 · Simulink 深度版
- Java语言移动整个文件夹或单个文件到另一个文件夹
- Python实现神经网络模型的数学公式识别源码文档说明
- 电力系统中配电网最优潮流的SOCP松弛技术应用与实现
- WinCC高级报表工具:自定义模板与多格式输出在工业自动化中的应用
- 基于ADRC控制的Matlab Simulink半车主动悬架建模:优化车身加速度与悬架性能的仿真研究 MatlabSimulink
- Java中文件与字节数组(byte)相互转换
- 使用PyTorch深度学习框架基于BiLSTM CRF的中文分词系统
- 基于BP神经网络的MNIST手写数字识别Python源码(期末大作业)
- C#基于.NET框架的串口数据读取与多曲线显示系统的实现
- Java语言清空文件夹下所有文件
- 基于OpenCV C#开发的圆卡尺、矩形卡尺等测量工具源码集,含视觉控件与自定义图形工具,运行稳定且操作便捷 v3.0
- PFC5.0技术下的预制裂隙含锚杆试样单轴压缩特性研究
- COMSOL多物理场仿真:压电效应中结构力学与静电场耦合模型及其应用


