02 Lambda表达式
1. 概念:
Java8 中新增加了lambda表达式,通过使用lambda表达式可以编写复杂的处理算法,
开发者在编写代码时,只要简单的修改 一个方法,就能让代码在多核CPU上高效运行。
可以把Lambda表达式理解为【简洁地】表示 【可传递的】【匿名函数】 的一种方式;
它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。
匿名:我们说匿名, 是因为它不像普通的方法那样有一个明确的名称。
函数:我们说它是函数, 是因为Lambda函数不像方法那样属于某个特定的类。
但和方法一样, Lambda有参数列表、函数主体、返回类型, 还可能有可以抛出的异常列表。
传递:Lambda表达式可以作为参数传递给方法或存储在变量中。( 行为参数)
简洁:无需像匿名类那样写很多模板代码。
lambda表达式的作用:**【 lambda表达式可以快速实现接口中的方法 】**
eg : 函数式编程,lambda表达式 替代 匿名内部类
public static void main ( String[ ] args) throws Exception {
Comparator< String> c = new Comparator < String> ( ) {
@Override
public int compare ( String o1, String o2) {
return o1. length ( ) - o2. length ( ) ;
}
} ;
Comparator< String> d = ( o1, o2) - > o2. length ( ) - o1. length ( ) ;
TreeSet< String> set = new TreeSet < > ( c) ;
}
2. lambda表达式的使用:
** 基本格式: () -> {}**
( ) 中用来写传入的参数值,要和函数式接口中的抽象方法的参数类型一致
{ } 用来写表达式的具体实现代码。
- > 固定格式,不可在中间添加空格
注:如果大括号里只有一句返回值代码,可以这样写: **() -> 返回值; **
如果不止一句代码,需要用 {} 包围,且 {} 里的代码需要打分号,就是普通正常代码。
如果没有返回值,且只有一句代码的情况下,不可以简写,系统会默认当作返回值返回!
1)没有参数,没有返回值: ()->{}
2)没有参数,有返回值: ()->{return 值;} ()-> 值;
3)有一个参数,没有返回值: (a)->{System.out.println(a)}
4)有一个参数,有返回值: (a)->{a++;return a;}
注:只有一个参数,()也可以不写: a->{};
5)有两个参数,没有返回值: (a,b)->{a++;System.out.println(b);}
6)有两个参数,有返回值: (a,b)->{a++;return a;}
3. lambda中局部变量的作用范围:
lambda中可以使用成员变量、局部变量,
但是,只要在lambda表达式中使用过局部变量,该局部变量就会默认修改为final,
不论是在lambda表达式里面还是外面,都不能再修改了。
成员变量没有使用限制
static int sum = 20 ;
public static void main ( String[ ] args) {
int age = 10 ;
I3 i1 = ( id) - > {
System. out. println ( id++ ) ;
System. out. println ( sum) ;
sum = 24 ;
System. out. println ( age) ;
} ;
sum = 25 ;
}