Lambda 表达式

本质:作为函数式接口的实例

格式

->:lambda 操作符()

->右边:lambda 形参列表(抽象方法的形参列表)

->左边:lambda 体(抽象方法的方法体)

使用格式

lambda 表达式六种使用情况:

  1. 形参类型可以省略,如果参数只有一个,可省小括号
  2. 方法体只有一条语句,可省略大括号(语句为 return 语句时,可省略 return 和大括号关键字)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//语法格式一:无参、无返回值
Runnable runnable = () -> System.out.println("123");
//语法格式二:有一个参数,无返回值
Consumer<String> s1 = (String s) -> {
System.out.println(s);
};
s1.accept("123");

//语法格式三:数据类型可以省略,编译器可以推断得出(类型推断)

Consumer<String> s2 = (s) -> {
System.out.println(s);
};
s2.accept("23");


//语法格式四:只需要一个参数,小括号可以省略
Consumer<String> s3 = s -> {
System.out.println(s);
};
s3.accept("34");


//语法格式五:多个参数,多个执行语句有返回值
Comparator<Integer> comparator = (o1, o2) -> {
System.out.println(o1);
System.out.println(o2);
return o1.compareTo(o2);
};
comparator.compare(12, 23);


//语法格式六:只有一条语句,有return时可省略return和大括号
Comparator<Integer> comparator2 = (o1, o2) ->
o1.compareTo(o2);
comparator2.compare(12, 11);

函数式接口

常见函数式接口

方法引用和构造器引用

方法引用的三种情况

引用要求:
抽象方法和方法体内部的调用方法

  1. 返回值相同
  2. 形参列表相同

Stream API

用于操作数据源(集合、数组)

特点

  1. 不存储元素
  2. 不该元数据
  3. 操作延迟执行

Stream 操作三步

  1. 创建 Stream
  2. 中间操作
  3. 终止操作