### Java函数式接口与Lambda表达式应用指南
#### 一、函数式接口基础
函数式接口指仅包含单个抽象方法的接口,可使用@FunctionalInterface注解标注。常见函数式接口包括:
- Runnable:无参数无返回值
- Consumer:单参数无返回值
- Function:单参数带返回值
- Predicate:单参数返回布尔值
- Supplier:无参数带返回值
#### 二、Lambda表达式语法
1. 标准格式:(参数列表) -> {方法体}
2. 简化规则:
- 单参数可省略括号
- 单行方法体可省略大括号
- 单行返回可省略return关键字
示例:
```java
// 完整写法
Function func1 = (String s) -> { return s.length(); };
// 简化写法
Function func2 = s -> s.length();
```
#### 三、方法引用实现
1. 静态方法引用:ClassName::staticMethod
2. 实例方法引用:instance::method
3. 构造方法引用:ClassName::new
示例:
```java
// 方法引用替代Lambda
Consumer printer = System.out::println;
Supplier> listSupplier = ArrayList::new;
```
#### 四、Stream API集成应用
1. 集合处理链式操作:
```java
List result = list.stream()
.filter(s -> s.length() > 3) // Predicate接口
.map(String::toUpperCase) // Function接口
.collect(Collectors.toList());
```
2. 并行流处理:
```java
long count = list.parallelStream()
.mapToInt(String::length) // ToIntFunction接口
.sum();
```
#### 五、自定义函数式接口
1. 定义接口:
```java
@FunctionalInterface
interface StringProcessor {
String process(String input);
default StringProcessor combine(StringProcessor next) {
return s -> next.process(this.process(s));
}
}
```
2. 使用示例:
```java
StringProcessor trim = String::trim;
StringProcessor upper = String::toUpperCase;
StringProcessor pipeline = trim.combine(upper);
```
#### 六、实践注意事项
1. 变量捕获规则:
- 可访问final或等效final的局部变量
- 实例字段和静态变量无限制
2. 异常处理:
```java
Function safeParse = s -> {
try {
return Integer.parseInt(s);
} catch (NumberFormatException e) {
return 0;
}
};
```
3. 调试技巧:
- 避免过长的Lambda表达式
- 复杂逻辑封装为独立方法
- 使用方法引用提升可读性
#### 七、性能优化建议
1. 优先使用基本类型特化接口(IntConsumer、LongFunction等)
2. 避免在循环中创建重复Lambda实例
3. 合理选择并行流处理场景
通过掌握函数式接口与Lambda表达式的结合使用,可显著提升代码简洁性和可维护性,同时为函数式编程范式奠定基础。实际开发中应注重类型推断、异常处理和性能优化的平衡,结合Stream API实现声明式集合处理。
1万+

被折叠的 条评论
为什么被折叠?



