Lambda表达式解读
本文通过具体案例演示函数式接口Function<T,R>
的三种实现方式演变过程。
一、传统匿名内部类实现
Integer resInt1 = t1(new Function<String, Integer>() {@Overridepublic Integer apply(String s) {int i = Integer.parseInt(s);return i;}
});
实现特点:
- 显式创建
Function
接口的匿名实现类 - 完整声明
apply
方法的参数类型String
- 使用显式
return
语句返回结果 - 包含完整的花括号和方法体结构
二、基础Lambda实现
Integer resInt2 = t1((String t) -> {int i = Integer.parseInt(t);return i;
});
优化点:
- 使用Lambda表达式替代匿名类
- 保持显式参数类型声明
- 保留完整方法体结构
- 语法更紧凑但保留核心逻辑
三、精简Lambda表达式
Integer resInt3 = t1(t -> Integer.parseInt(t));
优化路径:
-
参数类型推断
- 编译器通过方法签名
Function<String, Integer>
自动推断t
的类型 - 简写为
t ->
代替(String t) ->
- 编译器通过方法签名
-
单表达式优化
- 当方法体仅包含单个表达式时:
- 省略
return
关键字 - 移除花括号
- 直接写表达式作为返回值
-
方法引用替代(进一步优化)
Integer resInt4 = t1(Integer::parseInt);
- 使用类方法引用语法
- 完全消除参数列表
- 直接绑定静态方法
核心方法解析
public static Integer t1(Function<String, Integer> fn) {return fn.apply("1");
}
执行流程:
- 接收
Function<String, Integer>
类型参数 - 调用
apply
方法传入固定参数"1" - 返回转换后的
Integer
结果