Lambda表达式

1. 什么是Lambda表达式

Lambda表达式是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升


简单案例

1
(o1, o2) -> Integer.compare(o1, o2);

格式

-> : lambda操作符或箭头操作符
->的左边 : lambda形参列表,对应着要重写的接口中的抽象方法的形参列表
->的右边 : Lambda体,对应着接口的实现类要重写的方法的方法体


2. Lambda表达式的语法

语法格式一:无参,无返回值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Test
public void test() {
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("小白学Java");
}
}
};
r1. run();

System.out.println("*************************");

Runnable r2 = () -> {
System.out.println("小白学Lambda");
};
r2.run();

语法格式二:需要一个传输,但是没有返回值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Test
public void test() {
Consumer<String> con = new Consumer<String>() {
@Override
public void accpet(String s) {
System.out.println(s);
}
};
con.accpet("谎言和誓言的区别是什么?");

System.out.println("*************************");

Consumer<String> con1 = (String s) -> {
System.out.println(s);
};
con1.accept("一个是说的人当真了,一个是听的人当真了")
}

语法格式三:数据类型可以省略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Test
public void test() {
Consumer<String> con = new Consumer<String>() {
System.out.println(s);
};
con.accpet("如果大学可以重来,你最想重来的事是什么?");

System.out.println("*************************");

Consumer<String> con1 = (s) -> {
System.out.println(s);
};
con1.accept("多去其它地方玩玩,别一直搁长沙玩")
}

语法格式四:形参列表只有一个的时候,小括号也可以省略

1
2
3
4
5
6
7
@Test
public void test() {
Consumer<String> con1 = s -> {
System.out.println(s);
};
con1.accept("多去其它地方玩玩,别一直搁长沙玩")
}


3. 函数式接口

如果接口中只声明有一个抽象方法,则此接口就称为函数式接口,因为只有给函数式接口提供实现类对象时,我们才能使用Lambda表达式

jdk1.8中声明的函数式接口都在java.uti.function包下


四大核心函数式接口

函数式接口 称谓 参数类型 用途
Consumer 消费型接口 T 对类型为T的对象应用操作,包含方法:void accept(T t)
Supplier 供给型接口 返回类型为T的对象,包括方法:T get()
Function<T,R> 函数型接口 T 对类型为T的对象应用操作,并返回结果。结果是R类型的对象,包含方法R apply(T t)
Predicate 判断型接口 T 确定类型为T的对象是否满足某约束,并返回boolean值,包含方法boolean test(T t)

Lambda表达式
https://lzhengjy.github.io/2023/10/18/Lambda表达式/
作者
Zheng
发布于
2023年10月18日
许可协议