当前位置: 首页 > backend >正文

Java8新特性 consumer

Consumer 是 Java 8 引入的一个函数式接口,用于表示接受一个输入参数但不返回结果的操作。
Consumer接口在Java 8的函数式编程中非常有用,特别是在需要执行副作用操作(如打印、修改对象状态等)而不需要返回结果的场景中。

下面是一些常见的使用示例:

基本用法

Consumer<String> printConsumer = str -> System.out.println(str);
printConsumer.accept("Hello, Consumer!");  // 输出: Hello, Consumer!

集合遍历


List<String> names = Arrays.asList("Alice", "Bob", "Charlie");// 使用Consumer遍历列表
names.forEach(name -> System.out.println(name));// 使用方法引用简化
names.forEach(System.out::println);

组合Consumer


Consumer<String> printUpperCase = s -> System.out.println(s.toUpperCase());
Consumer<String> printLowerCase = s -> System.out.println(s.toLowerCase());// 使用andThen组合两个Consumer
Consumer<String> printBoth = printUpperCase.andThen(printLowerCase);
printBoth.accept("Hello");  // 输出: HELLO 和 hello

实际应用场景

数据处理管道:


List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);Consumer<Integer> square = n -> System.out.println(n * n);
Consumer<Integer> cube = n -> System.out.println(n * n * n);numbers.forEach(square.andThen(cube));

对象属性修改:


class Person {String name;// 构造方法、getter和setter省略
}List<Person> people = Arrays.asList(new Person("Alice"), new Person("Bob"));Consumer<Person> namePrinter = p -> System.out.println(p.getName());
Consumer<Person> nameModifier = p -> p.setName(p.getName().toUpperCase());people.forEach(nameModifier.andThen(namePrinter));

资源处理:


Consumer<BufferedReader> fileProcessor = reader -> {try {String line;while ((line = reader.readLine()) != null) {System.out.println(line);}} catch (IOException e) {e.printStackTrace();}
};try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {fileProcessor.accept(br);
}

与Optional结合使用


Optional<String> optional = Optional.of("Hello");// 如果值存在,执行Consumer操作
optional.ifPresent(System.out::println);  // 输出: HelloOptional.empty().ifPresent(System.out::println);  // 不执行任何操作
http://www.xdnf.cn/news/13900.html

相关文章:

  • 访客预约到访填写表单如何制作?
  • C语言二级指针和void *应用
  • 质因数分解_java
  • 前端开发冷知识-requestIdleCallback优化主线程任务调度的API
  • 微服务集成seata分布式事务 at模式快速验证
  • 《模拟》题集
  • 图像处理 | 如何动态调整CLAHE算法中的ClipLimit参数
  • DeepSeek AI功能演示:如何生成Verilog脚本
  • 【基础】每天掌握一个Linux命令 - systemctl
  • PurgeCSS:CSS瘦身优化性能终极解决方案
  • Geeksend 邮箱验证:低成本验证
  • 文件的秒传、分片上传以及断点续传 || Redis缓存减轻数据库读写压力
  • 2.0 第一个Node节点
  • 6.12 操作系统面试题 进程管理
  • Vue 3 前端和 Spring Boot 后端生成 Docker 镜像的标准做法
  • Spring Boot 整合 Smart-Doc:零注解生成 API 文档,告别 Swagger
  • 电压互感器类型与消谐器需求的关联
  • LeetCode 137 有限状态自动机解法原理详解
  • 测试:AWS SDK for JavaScript v2 迁移到 v3
  • 帆软报表实现层层下钻继承上上层报表参数
  • ollama+docker+dify配置指南
  • CQL3D输入文件及参数解释
  • linux中执行脚本命令的source和“.”和“./”的区别
  • 校园网数据安全防线
  • sed命令在修改Rocky Linux镜像源配置文件中的作用:
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月12日第106弹
  • 晶圆搬运机器人与RFID半导体读卡器携手赋能半导体制造高效变革
  • 探索铸铁试验平台在制造行业的卓越价值
  • HALCON第一讲->数据结构、语法规则与思路
  • 深度学习网络入侵检测系统警报