一、概述
Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
Lambda 表达式在Java 语言中引入了一个新的语法元素和操作符。这个操作符为 "→" , 该操作符被称为 Lambda 操作符或箭头操作符。它将 Lambda 分为两个部分:
左侧:指定了 Lambda 表达式需要的所有参数
右侧:指定了 Lambda 体,即 Lambda 表达式要执行的功能
二、函数式接口
2.1、概览图
2.2、Java内置的核心四大函数式接口
2.3、四大函数式接口案例代码
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/21 9:52
* @Description: 函数式接口
*/
public class FunctionMainApp {
public static void main(String[] args) {
/**
* R apply(T t):函数型接口,一个参数一个返回值
*/
Function<String,Integer> function = t -> {return t.length();};
System.out.println(function.apply("Hello!"));
/**
* boolean test(T t):断定型接口,一个参数,返回boolean
*/
Predicate<String> predicate = t -> {return t.startsWith("H");};
System.out.println(predicate.test("Hello World!"));
/**
* void accept(T t):消费型接口,一个参数,没有返回值
*/
Consumer<String> consumer = t -> {System.out.println(t);};
consumer.accept("Hello Function!");
/**
* T get():供给型接口,无参数,有返回值
*/
Supplier<String> supplier = () -> {return UUID.randomUUID().toString();};
System.out.println(supplier.get());
}
}
三、自定义函数式接口案例
3.1、定义函数式接口
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/20 10:14
* @Description: 定义函数式接口
*/
@FunctionalInterface
public interface LambdaCalculator {
/**
* 加
*
* @param x
* @param y
* @return
*/
public int add(int x, int y);
/**
* 减
*
* @param x
* @param y
* @return
*/
default int sub(int x, int y) {
return x - y;
}
/**
* 乘
*
* @param x
* @param y
* @return
*/
default int mul(int x, int y) {
return x * y;
}
/**
* 除
* @param x
* @param y
* @return
*/
public static int div(int x, int y) {
return x / y;
}
}
3.2、使用函数式接口
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/20 10:18
* @Description: 函数式编程
* 口诀:
* 1、拷贝小括号(形参列表),写死右箭头 ->,落地大括号 {方法实现}
* 2、有且只有一个public方法,@FunctionalInterface注解增强定义
* 3、default方法默认实现
* 4、静态方法实现
*/
public class LambdaCalculatorMainApp {
public static void main(String[] args) {
LambdaCalculator calculator = (x, y) -> {
System.out.println("Hello Lambda!");
return x + y;
};
System.out.println("=========> add:" + calculator.add(6, 2));
System.out.println("=========> sub:" + calculator.sub(6, 2));
System.out.println("=========> mul:" + calculator.mul(6, 2));
System.out.println("=========> div:" + LambdaCalculator.div(6, 2));
}
}
3.3、结果
四、小总结
4.1、定义函数式接口
1、类型为接口
2、有且只有一个public方法,@FunctionalInterface注解增强定义
3、default方法默认实现
4、静态方法实现
思考:Runnable接口为什么可以使用Lambda表达式?
4.2、Lambda表达式使用口诀
拷贝小括号(),写死右箭头→,落地大括号{…}