LambdaExpress
一 . 理论
1.1 是什么
Java Lambda表达式是Java 8引入的一种新的语言特性,用于简化函数式编程和匿名内部类的使用。Lambda表达式可以看作是一个匿名函数,它没有名称,但具备参数列表、函数体和返回值。
1.2 函数式编程思想
在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。编程中的函数,也有类似的概念,你调用我的时候,给我实参为形参赋值,然后通过运行方法体,给你返回一个结果。对于调用者来做,关注这个方法具备什么样的功能。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。
-
面向对象的思想:
做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情. -
函数式编程思想:
只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程
Java8引入了Lambda表达式之后,Java也开始支持函数式编程。
Lambda表达式不是Java最早使用的,很多语言就支持Lambda表达式,例如:C++,C#,Python,Scala等。如果有Python或者Javascript的语言基础,对理解Lambda表达式有很大帮助,可以这么说lambda表达式其实就是实现SAM接口的语法糖,使得Java也算是支持函数式编程的语言。Lambda写的好可以极大的。
lambda表达式的重要特征
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。
Lambda表达式的基本语法如下:
(parameter_list) -> {
// 函数体
// 可以是一行代码或者多行代码
// 也可以是一个返回值表达式
}
其中,parameter_list表示参数列表,可以包含零个或多个参数。箭头->用于分隔参数列表和函数体。函数体可以是一行代码或多行代码,可以包含任意Java语句和表达式。
下面是几个Lambda表达式的示例:
- 无参数的Lambda表达式:
() -> System.out.println("Hello, Lambda!");
- 带一个参数的Lambda表达式:
(x) -> System.out.println("Hello, " + x);
- 带多个参数的Lambda表达式:
(x, y) -> {
int sum = x + y;
System.out.println("Sum: " + sum);
return sum;
};
Lambda表达式可以用于替代使用函数接口(Functional Interface)的匿名内部类。函数接口是只有一个抽象方法的接口,可以使用@FunctionalInterface注解标记。
以下是使用Lambda表达式实现函数接口的示例:
// 定义函数接口
@FunctionalInterface
interface Calculator {
int calculate(int x, int y);
}
// 使用Lambda表达式创建函数接口的实例
Calculator add = (x, y) -> x + y;
Calculator subtract = (x, y) -> x - y;
// 调用函数接口的方法
int sum = add.calculate(3, 5); // 结果为8
int difference = subtract.calculate(9, 4); // 结果为5
使用 Lambda 表达式需要注意以下两点:
- Lambda表达式主要用来定义行内执行的方法类型接口,例如,一个简单方法接口。在上面例子中,我们使用各种类型的Lambda表达式来定义MathOperation接口的方法。然后我们定义了sayMessage的执行。
- Lambda 表达式免去了使用匿名方法的麻烦,并且给予Java简单但是强大的函数化的编程能力。
Lambda表达式在Java中广泛用于集合框架和多线程编程等场景,它简化了代码的编写并提升了可读性。