学习笔记 : JDK 8新特性之Lambda表达式的基本语法
简介
Lambda表达式 : 在Java8语言中引入的一种新的语言元素和操作符,这个操作符为->
,该操作符被称为Lambda操作符
或箭头操作符
,它将Lambda分为以下两个部分
左侧
: 指定Lambda表达式需要的参数列表右侧
: 制定了Lambda体,是抽象方法的实现逻辑,也既Lambda表达式要执行的功能
特征
- 可选类型声明 : 不需要声明参数类型,编译器可以统一识别参数值
- 可选的参数圆括号 : 一个参数无需定义圆括号,但多个参数需要定义圆括号
- 可选的大括号 : 如果主体包含了一个语句,就不需要使用大括号
- 可选的返回关键字 : 如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值
语法
语法格式一 : 无参,无返回值
1
Runnable runnable = () -> System.out.println("Hello Lambda1 !");
语法格式二 : Lambda需要一个参数,但是没有返回值
1
2//可以简写为: Consumer<String> consumer = System.out::println;
Consumer<String> consumer = (String str) -> System.out.println(str);语法格式三 : 数据类型可以省略,因为可由编译器推断得出,称为”类型推断”
1
Consumer<String> c = (str) -> { System.out.println(str) };
语法格式四 : Lambda若需要一个参数时,参数的小括号可以省略
1
Consumer<String> c = str -> { System.out.println(str) };
语法格式五 : Lambda需要两个或以上的参数,多条执行语句,并且可以有返回值
1
2
3
4Comparator<String> c = (x,y) -> {
System.out.println("this is comparator");
return Integer.compare(x,y);
};语法格式六 : 当Lambda体只有一条语句时,return与大括号若有,都可以省略
1
2//可以简写为: Comparator<Integer> comparator = Integer::compare;
Comparator<Integer> c = (x,y) -> Integer.compare(x,y);
程序示例
程序示例 : 语法格式一
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18//未使用Lambda表达式
public void runnable() {
Runnable runnable = new Runnable() {
public void run() {
System.out.println("this is runnable");
}
};
runnable.run();
}
//使用Lambda表达式
public void runnableWithLambda() {
Runnable runnable = () -> System.out.println("this is runnable");
runnable.run();
}程序示例 : 语法格式二/三/四
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void consumer() {
Consumer<String> consumer = new Consumer<String>() {
public void accept(String s) {
System.out.println(s);
}
};
consumer.accept("this is consumer");
}
public void consumerWithLambda() {
//可以简写为: Consumer<String> consumer = (str) -> System.out.println(str);
//可以简写为: Consumer<String> consumer = str -> System.out.println(str);
//可以简写为: Consumer<String> consumer = System.out::println;
Consumer<String> consumer = (String str) -> System.out.println(str);
consumer.accept("this is consumer");
}程序示例 : 语法格式五
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void comparator() {
Comparator<Integer> comparator = new Comparator<Integer>() {
public int compare(Integer x, Integer y) {
return Integer.compare(x, y);
}
};
System.out.println(comparator.compare(1, 2));
}
public void comparatorWithLambda() {
Comparator<Integer> comparator = (x, y) -> {
System.out.println("this is comparator");
return Integer.compare(x, y);
};
System.out.println(comparator.compare(1, 2));
}程序示例 : 语法格式六
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void comparator() {
Comparator<Integer> comparator = new Comparator<Integer>() {
public int compare(Integer x, Integer y) {
return Integer.compare(x, y);
}
};
System.out.println(comparator.compare(1, 2));
}
public void comparatorWithLambda() {
//可以简写为: Comparator<Integer> comparator = Integer::compare;
Comparator<Integer> comparator = (x, y) -> Integer.compare(x, y);
System.out.println(comparator.compare(1, 2));
}
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment