小贴士:
Lambda表达式只能简化函数式接口的匿名内部类的写法形式。
函数式接口:
首先必须是接口,其次接口中有且仅有一个抽象方法的形式
通常接口上方加上一个@FunctionnallInterface注解,标记该接口必须是满足函数式接口
Lambda表达式的省略模式
-
小括号内的参数类型可以省略,有多个参数的情况下,不能只省略一个
-
如果小括号内有且仅有一个参数,则小括号可以省略
-
如果大括号内有且仅有一个语句,可以同时省略大括号,return 关键字及语句分号。
lambda演示代码
情形一:多个参数,有返回值
package com.java.lambda;
@FunctionalInterface // 一旦加上这个注解必须是函数式接口,里面只能有一个抽象方法
public interface Count {
int add(int num1, int num2);
}
package com.java.lambda;
// 多个参数,有返回值
public class LambdaDemo01 {
public static void main(String[] args) {
// 完整写法
useCount((int x, int y) -> {
return x + y;
});
System.out.println("-------------");
// 省略写法
useCount((x, y) -> x + y);
// 进阶方式
useCount(Integer::sum);
}
private static void useCount(Count count) {
System.out.println(count.add(3, 7));
}
}
情形二:一个参数,无返回值
package com.java.lambda;
@FunctionalInterface // 一旦加上这个注解必须是函数式接口,里面只能有一个抽象方法
public interface Swimming {
void swim(String name);
}
package com.java.lambda;
// 一个参数,无返回值
public class LambdaDemo02 {
public static void main(String[] args) {
// 完整写法
go((String s) -> {
System.out.println(s + "游泳贼厉害。。。");
});
System.out.println("-------------");
// 省略写法
go(s -> System.out.println(s + "游泳贼厉害。。。"));
}
private static void go(Swimming swimming) {
swimming.swim("小红");
}
}
情形三:无参数无返回值
package com.java.lambda;
@FunctionalInterface // 一旦加上这个注解必须是函数式接口,里面只能有一个抽象方法
public interface Running {
void run();
}
package com.java.lambda;
// 无参无返回值
public class LambdaDemo03 {
public static void main(String[] args) {
// 完整写法
move(() -> {
System.out.println("一起去跑步呀。。。");
});
System.out.println("-------------");
// 省略写法
move(() -> System.out.println("一起去跑步呀。。。"));
}
private static void move(Running running) {
running.run();
}
}
以上就是我对Lambda表达式—省略写法的理解,如果文章由于我学识浅薄,导致您发现有严重谬误的地方,请一定在评论中指出,我会在第一时间修正我的文章,以避免误人子弟。