Java-Lambda,高效但会牺牲阅读性

青春须早为,岂能长少年

函数式编程

函数式编程(Function programing)是一种思想特点,忽略面向对象的复杂语法,强调做什么,而不是谁去做。

Lambda表达式就是函数式思想的体现。

Lambda表达式的标准格式

Lambda表达式是JDK8开始后的一种新语法形式

()->{

}

() 对应着方法的形参

-> 固定格式

{} 对应着方法的方法体

面向对象:先找到对象,让对象做事情。

1
2
3
4
5
6
7
8
9
10
11
12
Arrays.sort(arr,new comparater(){
@override
public int compare(Integer o1 ,Integer o2){
return o1 - o2;
}
})
/*
将匿名内部类中的对象删除,注重方法
*/
Arrays.sort(arr,(Integer o1 ,Integer o2)->{
return o1 - o2;
})

注意点:

Lambda表达式可以用来简化匿名内部类的书写

Lambda表达式只能简化函数式接口的匿名内部类的写法

函数式接口:

有且只有一个抽象方法的接口叫做函数式接口,接口上方可以加@FunctionalInterface注解

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
public LambdaDemo{
public static void main(String args[]){

// 利用匿名内部类的形式去调用下面的方法
// 调用一个方法的时候,如果方法的形参是一个接口那么我们要传递这个接口的实现类对象
// 如果实现类对象主要用到一次,就可以使用匿名内部类形式进行书写
// 调用这个静态方法,去实现接口和重新抽象方法
method(new Swim(){ //Swim接口被实现,传递了实现类对象,以匿名内部类的方式使用
public void swimming(){ //重写了抽象方法,并完成了调用
System.out.println("SWIMING!");
}
});

method(
()->{
System.out.println("SWIMING!");
});
}

public static void method(Swim s){ //这个静态方法调用了接口中的抽象方法
s.swiming();
}
}


/*
Swim接口,内部有抽象方法swiming()
*/
interface Swim{
public abstract void swimming();
}

Lambda省略规则

  1. 参数类型可以省略不写

  2. 如果只有一个参数,参数类型可以省略,括号也快以省略

  3. 如果Lambda表达式的方法体只有一行,大括号、小括号、分号、return可以省略不行,需要同时省略

1
2
3
4
5
Arrays.sort(arr,(Integer o1 ,Integer o2)->{
return o1 - o2;
})
// 省略后:
Arrays.sort(arr,(o1, o2) -> o1-o2 );