Java复习Day26
Lambda表达式简介
Lambda表达式是Java 8的重要特性,允许使用简洁的表达式代替功能接口。它类似于方法,包含参数列表和执行主体(可以是表达式或代码块)。Lambda可以视为匿名内部类的语法糖,也被称为闭包。
优点
- 代码简洁,开发效率高
- 支持函数式编程
- 简化过滤和计算操作
- 优化集合类操作
缺点
- 代码可读性降低
- 调试难度增加
- 在非并行计算中性能可能不如传统for循环
Lambda语法
基本语法:
(parameters) -> expression
(parameters) -> {statements;}
组成结构:
- parameters:类似方法的形参列表,可以显式声明类型或由JVM推断
- ->:表示"被用于"
- 方法体:可以是表达式或代码块,可返回值或不返回值
JDK核心函数式接口
四大核心接口
接口名 | 类型 | 抽象方法 |
---|---|---|
Consumer<T> | 消费型接口 | void accept(T t) |
Supplier<T> | 供给型接口 | T get() |
Function<T,R> | 函数型接口 | R apply(T t) |
Predicate<T> | 断言型接口 | boolean test(T t) |
其他常用接口
接口名 | 类型 | 抽象方法 |
---|---|---|
BiConsumer<T,U> | 消费型接口 | void accept(T t,U u) |
BiFunction<T,U,R> | 函数型接口 | R apply(T t,U u) |
UnaryOperator<T> | 函数型接口 | T apply(T t) |
BinaryOperator<T> | 函数型接口 | T apply(T t,T t1) |
ToIntFunction<T> | 函数型接口 | int applyAsInt(T t) |
ToDoubleFunction<T> | 函数型接口 | double applyAsDouble(T t) |
IntFunction<R> | 函数型接口 | R apply(int i) |
DoubleFunction<R> | 函数型接口 | R apply(double d) |
方法引用
当Lambda表达式中的功能已有方法实现时,可以使用方法引用。要求参数列表和返回值类型与函数式接口的抽象方法一致。
语法格式:
- 静态方法引用:
类名::静态方法名
- 实例方法引用:
实例对象名::实例方法名
- 特殊方法引用:
类名::实例方法名
- 构造方法引用:
类名::new
- 数组引用:
数组类型[]::new
- this和super引用:
this::方法名
/super::方法名