lamda

基本概念

Java8 lamda(λ)表达式:使用lamda表达式可以简略去【函数式接口实现、新建内部类、实例化】这些过程,直接实现了接口抽象方法的重写和使用。

  1. 替代匿名内部类。
  2. 避免匿名内部类定义过多
  3. 函数式编程。

适用前提:函数式接口。

函数式接口Functional Interface:一种接口,只包含【唯一一个】抽象方法

1
2
3
4
5
// Runnable接口属于函数式接口
@FunctionalInterface
public interface Runnable {
public abstract void run();
}

语法简化内容

  1. 省略参数类型(多个参数的数据类型,要么都去掉,要么都保留)
  2. 省略参数小括号(仅一个参数适用)。
  3. 省略方法体(仅一句代码适用,JS箭头函数要求仅一句且作为返回值时省略,lamda表达式不考虑返回值)。

用途示例

JS箭头函数,是方法的简写,省略了function、作用域挂在直属父类对象,方法匿不匿名均可。

1
2
3
4
5
function add(x,y) {
return x + y
}

add = (x, y) => x + y

lamda表达式,是对【实现implement 函数式接口的类A,实例化类A,调用A实例方法】这整个过程的简写,是对匿名类实例化方法调用的简写。

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
public class LamdaTest {
public static void main(String[] args) {
// 原生写法,非匿名类
class PersonLove implements ILove {
@Override
public void heart(){
System.out.println("人类的爱,加入了心的元素");
}
}
new PersonLove().heart();


// 原生写法,new ILove 是个匿名类(直接函数式接口实现、实例化)
ILove love = new ILove() {
@Override
public void heart() {
System.out.println("心动,动心");
}
};
love.heart();

// lamda表达式,简略去了【函数式接口实现、新建内部类、实例化】这些过程,表面上实现了接口抽象方法的直接实现和使用
ILove loveLamda = () -> {
System.out.println("爱,动心,让心活、让心死");
};
loveLamda.heart();
}
}

// 函数式接口
interface ILove {
void heart();
}

语法示例

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
/**
* 语法示例
* 省略参数类型
* 省略参数小括号(仅一个参数适用)
* 省略方法体(仅一句代码适用,当箭头函数时,仅有一句且作为返回值时省略,lamda表达式不考虑返回值)
*/
public class LamdaTestProgram {
public static void main(String[] args) {
// 省略参数类型,省略方法体
IPoeam poeam = (author, title) -> System.out.println(author + "写了诗:" + title);
poeam.write("李白", "燕歌行");

// 不省略
IPoeam poeam1 = (String author, String title) -> {
System.out.println(author + "写了诗:" + title);
System.out.println(author + "诗里的命运是国家的命运");
};
poeam1.write("杜甫", "望岳");

// 省略参数小括号
IBook book = title -> System.out.println("最近读了一本书:" + title);
book.read("大宋帝国三百年");
}
}

interface IPoeam {
void write(String author, String title);
}

interface IBook {
void read(String title);
}
-------------Keep It Simple Stupid-------------
0%