前言
各位小伙伴在源码或者其他某个地方肯定见到过形如 () -> 、() -> {} 的代码,说实话,我第一次见到这种代码的时候直接就是一脸懵逼,满脑子都是:啥啥啥!这写的都是啥!(不知道各位小伙伴有没有同样的感觉🤭)
说到这,各位小伙伴肯定就知道咱们今天要聊什么了~
没错!今天要聊的就是 Java 中的 Lambda 表达式,废话不多说,直接进入今天的正题⏩
Java Lambda 表达式
Lambda 表达式是 Java 8 中的一个新特性,也是推动 Java 8 发布的最重要的一个新特性。Lambda 表达式也可称为闭包,它允许我们把函数作为一个方法的参数(函数作为参数传递进方法中)来使用,Lambda 表达式的语法格式如下👇
(parameters) -> expression 或者是 (parameters) ->{ statements; }
上面的格式可能看起来比较费劲,那么咱们依然是用一个“猥琐”的写法来改写一下标准格式👇
(参数类型A 参数名称A, 参数类型B 参数名称B, …) -> { 具体代码 }
这次看起来是不是就明白多了😄 说白了 Lambda 表达式主要是由三部分组成的,分别是小括号、箭头、大括号,小括号里写的是方法的参数列表,语法与传统方法的参数列表一致(如果没有参数,就空着不用写;如果有多个参数,用逗号分隔);箭头是新引入的一个语法格式,代表指向动作;大括号里写的就是具体的逻辑代码了。
说完了标准格式,再来看看 Lambda 表达式的省略格式,省略格式的规则主要有以下几点:
- 小括号内的参数类型可以省略不写
- 如果小括号里有且仅有一个参数,那么小括号也可以省略不写
- 如果大括号里有且仅有一个语句,那么无论方法是否有返回值,大括号、 return 关键字、语句分号都可以省略不写。
咱们用数学的四则运算举个简单的例子~
/**
* LambdaDemo 表达式
* @description: LambdaDemo
* @author: 庄霸.liziye
* @create: 2021-12-30 14:55
**/
public class LambdaDemo {
public static void main(String[] args) {
LambdaDemo lambdaDemo = new LambdaDemo();
// 声明变量类型
MathCalculation addition = (int a, int b) -> a + b;
// 不声明变量类型
MathCalculation subtraction = (a, b) -> a - b;
// 标准格式
MathCalculation multiplication = (int a, int b) -> { return a * b; };
// 省略格式
MathCalculation division = (int a, int b) -> a / b;
System.out.println("加法:" + lambdaDemo.calculation(4, 2, addition));
System.out.println("减法:" + lambdaDemo.calculation(4, 2, subtraction));
System.out.println("乘法:" + lambdaDemo.calculation(4, 2, multiplication));
System.out.println("除法:" + lambdaDemo.calculation(4, 2, division));
}
/**
* 数学四则运算接口
*/
interface MathCalculation {
int calculation(int a, int b);
}
private int calculation(int a, int b, MathCalculation mathCalculation){
return mathCalculation.calculation(a, b);
}
}
通过上面这个例子我们可以看出,若想使用 Lambda 表达式也是有前提条件的:Lambda 表达式的作用是定义行内执行的方法类型接口(也就是说,想使用 Lambda 表达式就必须要有接口,并且要求接口有且仅有一个抽象方法),就像上面的例子一样,我们使用 Lambda 表达式定义的 MathCalculation 接口,实现了数学的四则运算。
这时候可能有些小伙伴会问:我们为什么要用 Lambda 表达式呢?其实也没有很特别的原因,使用 Lambda 表达式会让我们的代码变的更加简洁紧凑,瞬间提升代码逼格 ╰(°▽°)╯
上面的例子可能没有体现出来如何让代码变得整洁,那么请往下看(假如此时需要循环遍历集合中的值)👇
import java.util.Arrays;
import java.util.List;
/**
* LambdaDemo 表达式
* @description: LambdaDemo
* @author: 庄霸.liziye
* @create: 2021-12-30 14:55
**/
public class LambdaDemo {
public static void main(String[] args) {
List<String> list = Arrays.asList("我", "在", "人民广场", "吃着炸鸡");
// 传统方法循环list集合
for (String listValue : list) {
System.out.println(listValue + " ");
}
System.out.println("-------我是分割线-------");
// 使用lambda表达式循环list集合
list.forEach(listValue -> System.out.println(listValue + " "));
}
}
这次是不是一下就看出来了,此时传统的遍历方式就显得没有那么整洁,也没有那么有逼格了 (●’◡’●)
P.S. 传统的写法和 Lambda 表达式没有谁优于谁的说法。Lambda 表达式作为函数式编程虽然可以帮助我们简化代码,提高代码的精简度,但是如果接触 Lambda 表达式不多的话,使用起来就麻烦一些了,这时候反而使用传统写法效率更高(效率指的是编码效率)。所以说,选择适合自己的,才是最好的 🤞
小结
本人经验有限,有些地方可能讲的没有特别到位,如果您在阅读的时候想到了什么问题,欢迎在评论区留言,我们后续再一一探讨🙇
希望各位小伙伴动动自己可爱的小手,来一波点赞+关注 (✿◡‿◡) 让更多小伙伴看到这篇文章~ 蟹蟹呦(●’◡’●)
如果文章中有错误,欢迎大家留言指正;若您有更好、更独到的理解,欢迎您在留言区留下您的宝贵想法。
你在被打击时,记起你的珍贵,抵抗恶意;
你在迷茫时,坚信你的珍贵,抛开蜚语;
爱你所爱 行你所行 听从你心 无问东西
更多推荐
大聪明教你学Java | 深入浅出聊 Java Lambda 表达式
发布评论