Lambda表达式
- Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。
- 使用Lambda表达式不仅让代码变的简单、而且可读、最重要的是代码量也随之减少很多。
语法:
1
2
3(参数列表)->{
方法体
}lambda表达式的重要特征:
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
没有使用Lambda的老方法:
1
2
3
4
5Runnable runnable1=new Runnable(){
public void run(){
System.out.println("Hello!");
}
};使用Lambda:
1
2
3
4
5Runnable r2 = () -> {
System.out.println("Hi!");
};
// 只有一句代码 {}可以省略
Runnable r3 = () -> System.out.println("Hi!");方法中含有参数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("one");
list.add("three");
list.add("four");
Collections.sort(list,new Comparator<String>(){
public int compare(String o1, String o2) {
return o2.length()-o1.length();
}
});
System.out.println(list);
/*
* 参数类型无需指定,编译器会根据程序长下文分析出参数类型,
* 若不能确定时需要指定(否则编译不通过)
*/
Collections.sort(list,(o1,o2)->{
return o1.length()-o2.length();
});
System.out.println(list);
/*
* 如果可以忽略{} 那么方法中的return关键字也要省略
*/
Collections.sort(list,(o1,o2)->o1.length()-o2.length());
}