JDK8 API提供了很多函数式接口,这些函数式接口可以被抽象成一个具体的方法,并且使其使用在Lambda表达式中,今天我们要来说的就是其中的BiConsumer函数接口。
BiConsumer 接口深度解析
一、核心定位与特性
BiConsumer 是 Java 8 引入的关键函数式接口,用于处理需要 两个输入参数且无返回值 的操作场景。其核心特点如下:
特性 | 说明 |
---|---|
函数式接口 | 使用 @FunctionalInterface 注解标记,支持 Lambda 表达式和方法引用 |
副作用操作 | 设计初衷是执行带有副作用的操作(如修改外部状态、IO 操作) |
参数泛型化 | 支持泛型类型 <T, U> 定义两个输入参数的类型 |
操作链组合 | 通过 andThen() 方法实现多个操作的链式执行 |
二、核心方法详解
1. void accept(T t, U u)
• 功能:执行包含两个参数的核心操作
• 示例:
// 打印两个参数的乘积
BiConsumer<Integer, Integer> multiplier = (a, b) ->
System.out.println(a * b);
multiplier.accept(3, 4); // 输出 12
2. default BiConsumer<T, U> andThen(...)
• 功能:组合多个 BiConsumer 实现操作链
• 执行顺序:
• 特性:
• 前序操作异常会中断后续执行
• 支持构建复杂处理流程
三、典型应用场景
1. 集合处理(核心应用)
Map 遍历的最佳实践:
Map<String, Integer> map = Map.of("A", 1, "B", 2);
// 传统写法
for (Map.Entry