当前位置: 首页> 游戏> 评测 > 住房和城乡建设部办公厅_手工制作香囊_最近新闻有哪些_朋友圈广告推广代理

住房和城乡建设部办公厅_手工制作香囊_最近新闻有哪些_朋友圈广告推广代理

时间:2025/7/14 0:41:11来源:https://blog.csdn.net/lvzhihuanj/article/details/145741350 浏览次数:0次
住房和城乡建设部办公厅_手工制作香囊_最近新闻有哪些_朋友圈广告推广代理

iConsumer 是 Java 函数式编程中的一个重要接口,属于 java.util.function 包。它表示一个接受两个输入参数不返回结果的操作,通常用于执行带有副作用的操作(如修改对象、打印输出等)。

@FunctionalInterface
public interface BiConsumer<T, U> {
    void accept(T t, U u);
    // 可选的默认方法:andThen()

// 组合多个 BiConsumer(按顺序执行)default BiConsumer<T, U> andThen(BiConsumer<? super T, ? super U> after) {Objects.requireNonNull(after);return (t, u) -> {accept(t, u);after.accept(t, u);};}

}

  • 两个泛型参数T 和 U 分别表示第一个和第二个输入参数的类型。

  • 无返回值:方法 accept 返回 void

  • 链式调用:通过 andThen() 可以组合多个 BiConsumer 操作。


使用场景

  1. 遍历 Map 的键值对

  2. 同时处理两个集合的元素

  3. 批量修改对象属性

  4. 日志记录或数据校验


示例代码

示例 1:遍历 Map 的键值对

Map<String, Integer> map = Map.of("A", 1, "B", 2, "C", 3);

// 使用 BiConsumer 打印键值对
BiConsumer<String, Integer> printEntry = 
    (key, value) -> System.out.println(key + " -> " + value);

map.forEach(printEntry); // 直接传递 BiConsumer

示例 2:同时处理两个集合

List<String> names = List.of("Alice", "Bob", "Charlie");
List<Integer> ages = List.of(25, 30, 35);

// 遍历两个集合,按索引一一对应
BiConsumer<String, Integer> printNameAndAge = 
    (name, age) -> System.out.println(name + " is " + age + " years old");

for (int i = 0; i < names.size(); i++) {
    printNameAndAge.accept(names.get(i), ages.get(i));
}

示例 3:组合操作(andThen)
BiConsumer<String, Integer> logData = (key, value) -> System.out.println("Logging: " + key + " = " + value);BiConsumer<String, Integer> validateData = (key, value) -> {if (value < 0) throw new IllegalArgumentException("Invalid value: " + value);};// 先校验数据,再记录日志
BiConsumer<String, Integer> combined = validateData.andThen(logData);combined.accept("Score", 90);  // 正常执行
// combined.accept("Score", -5); // 抛出异常
示例 4:修改对象属性
class Person {String name;int age;// 省略构造方法和 getter/setter
}List<Person> people = Arrays.asList(new Person("Alice", 25),new Person("Bob", 30)
);// 批量修改年龄
BiConsumer<Person, Integer> incrementAge = (person, increment) -> person.setAge(person.getAge() + increment);people.forEach(person -> incrementAge.accept(person, 5)); // 所有人年龄+5

与其他接口对比

接口输入参数返回值典型用途
Consumer<T>1void处理单个对象
BiConsumer<T,U>2void处理两个关联对象或参数
BiFunction<T,U,R>2R转换两个参数为结果

总结

  • 核心作用:处理两个输入参数且不返回结果的操作。

  • 常见场景:遍历 Map、批量修改数据、组合校验与日志。

  • 链式调用:通过 andThen() 实现多步操作。

  • 与 Lambda 结合:简化代码,提升可读性。

关键字:住房和城乡建设部办公厅_手工制作香囊_最近新闻有哪些_朋友圈广告推广代理

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: