文章目录
零、Java 8 简介
参看:https://www.runoob.com/java/java8-new-features.html
B站宋红康Java 8部分:https://www.bilibili.com/video/BV1Qb411g7cz
Java 8新增了非常多的特性,我主要学习并记录了:
- 函数接口。
- Lambda表达式。
- 方法引用
::
。 - Stream API。
一、函数式接口
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
函数式接口可以被隐式转换为 lambda 表达式,一般情况下,函数式接口也是配合Lambda表达式使用,配合使用起来非常的简洁高效!函数式接口示例:
// 函数式接口
interface MathOperation {
// 有且仅有一个抽象方法
int operation(int a, int b);
// 可以有多个非抽象方法
void say(){
System.out.println("hello");
}
...
}
二、Lambda表达式
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中),者使得代码变的更加简洁紧凑。
Lambda表达式一般使用在支持函数式接口的地方,合理使用会极大的减少代码的复杂度。
1.Lambda语法
(parameters) -> expression
或
(parameters) ->{ statements; }
Lambda允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理。
Lambda表达式的重要特性:
- 可选类型声明: 不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号: 一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号: 如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字: 如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。
2.Lambda表达式实例
Lambda 表达式的简单使用格式:
// 1. 不需要参数,返回值为 5
() -> 5
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
// 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
写几个简单的应用:
public class Demo {
public static void main(String[] args) {
Demo demo = new Demo();
// 1.类型声明
MathOperation addition = (int a, int b) -> a - b;
// 2.不用类型声明
MathOperation subtraction = (a, b) -> a - b;
// 3.大括号中的返回语句 等价于 (a,b) -> { a * b; };
MathOperation multiplication = (int a, int b) -> {
return a * b; };
// 4.没有大括号及返回语句
MathOperation division = (int a, int b) -> a / b;
// 开始调用测试
System.out.println("4 + 2 = " + demo.operate(4,2,addition));
System.out.println("4 - 2 = " + demo.operate(4,2,subtraction