本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Lambda 表达式的语法
- Lambda 表达式是用来给
函数式接口
的变量或形参赋值使用的。
- 本质上,Lambda 表达式是用于实现
函数式接口
的抽象方法
。
- 语法:(形参列表) -> {Lambda体}
- 说明:
-
(形参列表)
:就是要赋值的函数式接口的抽象方法的(形参列表)
。
-
{Lambda体}
:就是实现这个抽象方法的方法体。
-
->
:Lambda操作符。
- 优化:
- 当
{Lambda体}
只有一条语句的时候,可以省略{}
和{;}
。
- 当
{Lambda体}
只有一条语句的时候,并且这个语句还是 return 语句的时候,return 也可以省略,但是如果{;}
没有省略,那么 return 是不可以省略的。
(形参列表)
的类型可以省略。
- 当
(形参列表)
的形参个数只有一个,那么可以将数据类型和()
一起省略,但是形参名不能省略。
- 当
(形参列表)
是空参的时候,()
不能省略。
示例1
package com.github.demo4;
import java.util.function.IntBinaryOperator;
public class Test {
public static void main(String[] args) {
useIntBinaryOperator(1, 2, (a, b) -> a + b);
}
public static void useIntBinaryOperator(int a, int b, IntBinaryOperator operator) {
int result = operator.applyAsInt(a, b);
System.out.println("result = " + result);
}
}
示例2
package com.github.demo5;
import java.util.Set;
import java.util.TreeSet;
public class Test {
public static void main(String[] args) {
Set<Integer> set = new TreeSet<>((a, b) -> a - b);
set.add(10);
set.add(100);
set.add(-20);
set.add(5);
set.add(1);
System.out.println("set = " + set); // set = [-20, 1, 5, 10, 100]
}
}
示例3
package com.github.demo6;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
public class Test {
public static void main(String[] args) {
userConsumer("abc", s -> System.out.println(s));
useSupplier(() -> String.valueOf(Math.random()));
usePredicate(Arrays.asList("a", "b", "c"), (s) -> s.equals("a"));
useFunction(1, (i) -> String.valueOf(i));
}
public static void userConsumer(String str, Consumer<String> consumer) {
consumer.accept(str);
}
public static void useSupplier(Supplier<String> supplier) {
String s = supplier.get();
System.out.println(s);
}
public static void usePredicate(List<String> list, Predicate<String> predicate) {
for (String s : list) {
if (predicate.test(s)) {
System.out.println(s);
}
}
}
public static void useFunction(Integer num, Function<Integer, String> function) {
String apply = function.apply(num);
System.out.println(apply);
}
}