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

Java中的Consumer接口应该如何使用(通俗易懂图解)

 应用场景:

第一次程序员A写好了个基础的遍历方法:

public class Demo1 {public static void main(String[] args) {//假设main方法为程序员B写的,此时需要去调用A写好的一个遍历方法//1.如果此时B突然发现想将字符串以小写的形式打印出来,则去请求A修改LinkedList<String > list=new LinkedList<>();list.add("Acb");list.add("Vudh");list.add("hsuU");print(list);}//A程序员写的遍历方法public static void print(LinkedList<String> list){for (String s : list) {System.out.println(s);}}
}

 第二次程序员A完成了字符转小写的遍历方法:

 public static void main(String[] args) {//假设main方法为程序员B写的,此时需要去调用A写好的一个遍历方法//1.如果此时B突然发现想将字符串以小写的形式打印出来,则去请求A修改LinkedList<String > list=new LinkedList<>();list.add("Acb");list.add("Vudh");list.add("hsuU");print(list);}//A程序员写的遍历方法public static void print(LinkedList<String> list){for (String s : list) {System.out.println(s.toLowerCase());}}

第三次程序员A直接将接口调用给了B,B可以根据需求自己去实现打印形式:

 public static void main(String[] args) {//假设main方法为程序员B写的,此时需要去调用A写好的一个遍历方法//1.如果此时B突然发现想将字符串以小写的形式打印出来,则去请求A修改LinkedList<String > list=new LinkedList<>();list.add("Acb");list.add("Vudh");list.add("hsuU");print(list, new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s.toUpperCase());}});}//A程序员写的遍历方法,将consumer接口调用给Bpublic static void print(LinkedList<String> list,Consumer<String> consumer ){for (String s : list) {consumer.accept(s);}}

内容补充:

        

  1. 定义与概念
    • 在 Java 中,Consumer接口是一个函数式接口,它属于java.util.function包。函数式接口是指只包含一个抽象方法的接口,Consumer接口中的抽象方法是void accept(T t)。这个方法接收一个类型为T的参数,并且没有返回值。它主要用于对给定的输入参数进行某种操作,比如打印、修改等,但不返回结果。
  2. 使用场景
    • 数据消费:可以用于遍历一个集合,对集合中的每个元素进行某种操作。例如,有一个包含整数的列表,想要打印出列表中的每个元素,可以使用Consumer接口。
    • 对象属性修改:在面向对象编程中,用于修改对象的某些属性。比如,有一个Person类,包含nameage属性,通过Consumer接口可以修改Person对象的age属性。
  3. 示例代码
    • 简单的打印操作

      import java.util.ArrayList;
      import java.util.List;
      import java.util.function.Consumer;
      public class ConsumerExample {public static void main(String[] args) {List<Integer> numberList = new ArrayList<>();numberList.add(1);numberList.add(2);numberList.add(3);// 使用Consumer接口打印列表中的每个元素Consumer<Integer> printConsumer = num -> System.out.println(num);numberList.forEach(printConsumer);}
      }
      
    • 在这个示例中,首先创建了一个包含整数的ArrayList。然后定义了一个Consumer类型的变量printConsumer,它的accept方法实现是通过 Lambda 表达式num -> System.out.println(num)来定义的,即对于传入的整数进行打印操作。最后,使用forEach方法遍历numberList,并将每个元素传递给printConsumeraccept方法进行打印。
    • 对象属性修改示例
      class Person {String name;int age;public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}
      }
      public class ConsumerObjectExample {public static void main(String[] args) {Person person = new Person("Alice", 20);// 定义一个Consumer来修改Person对象的年龄Consumer<Person> ageModifier = p -> p.age = p.age + 1;ageModifier.accept(person);System.out.println("修改后的年龄: " + person.getAge());}
      }
      
    • 在这里,定义了一个Person类,包含nameage属性。在main方法中创建了一个Person对象。然后定义了一个Consumer,它的accept方法实现是将传入的Person对象的年龄加 1。最后通过accept方法修改person对象的年龄,并打印出修改后的年龄。
  4. 与其他函数式接口的比较
    • Function接口相比,Function接口有返回值,其抽象方法是R apply(T t)R是返回值类型,而Consumer接口没有返回值。例如,Function可以用于将一个整数列表中的每个元素进行平方运算并返回新的列表,Consumer则更侧重于对元素进行操作而不返回新的计算结果。
    • Supplier接口不同,Supplier接口没有输入参数,其抽象方法是T get(),主要用于提供一个对象或值,而Consumer是消费一个已经存在的对象或值。

用Java的Consumer接口实现一个统计列表中元素个数的程序

在Java 8中,如何使用Consumer接口与Stream API结合?

除了Consumer接口,Java中还有哪些常用的函数式接口?

相关文章:

Java中的Consumer接口应该如何使用(通俗易懂图解)

应用场景&#xff1a; 第一次程序员A写好了个基础的遍历方法&#xff1a; public class Demo1 {public static void main(String[] args) {//假设main方法为程序员B写的,此时需要去调用A写好的一个遍历方法//1.如果此时B突然发现想将字符串以小写的形式打印出来&#xff0c;则…...

D102【python 接口自动化学习】- pytest进阶之fixture用法

day102 pytest的usefixtures方法 学习日期&#xff1a;20241219 学习目标&#xff1a;pytest基础用法 -- pytest的usefixtures方法 学习笔记&#xff1a; fixture调用方法 实际应用 总结 pytest.mark.usefixtures(func)&#xff0c;pytest的usefixtures方法&#xff0c;无…...

从零玩转CanMV-K230(4)-小核Linux驱动开发参考

前言 K230 芯片是一款基于 RISC-V 架构的端侧 AIoT 芯片&#xff0c;包含两个核心&#xff1a; CPU 1: RISC-V 处理器&#xff0c;1.6GHz&#xff0c;32KB I-cache, 32KB D-cache, 256KB L2 Cache&#xff0c;128bit RVV 1.0扩展 CPU 0: RISC-V 处理器&#xff0c;0.8GHz&am…...

上汽大通汽车CAN数据解析开发服务及技术商用领域详细解析

上汽大通G90是一款集豪华、科技与舒适于一身的中大型MPV&#xff0c;号称“国产埃尔法”。在国内市场&#xff0c;作为“卷王”的G90主要面向中大型MPV市场&#xff0c;满足家庭出行、商务接待和客运租赁等多元化场景需求&#xff0c;在国内市场上取得了不错的销售成绩。在海外…...

基于SCUI的后台管理系统

一、SCUI Admin 官方地址&#xff1a;https://python-abc.xyz/scui-doc/ 高性能中后台前端解决方案&#xff0c;基于 Vue3、elementPlus 持续性的提供独家组件和丰富的业务模板帮助你快速搭建企业级中后台前端任务。 预览地址&#xff1a;https://python-abc.xyz/scui-doc/de…...

使用频谱分析仪:RBW,Res BW,分辨率带宽;Sweep,扫描;noise floor,底噪,如何降低底噪?

RBW与Sweep的定义及其特性阐述&#xff1a; Res BW&#xff0c;即Resolution Bandwidth&#xff08;分辨率带宽&#xff09;&#xff0c;是衡量仪器分辨信号细节能力的重要参数。当RBW的数值越小&#xff0c;意味着像素点的尺寸更为精细&#xff0c;从而能够观察到更为细微的信…...

项目管理工具Maven(一)

Maven的概念 什么是Maven 翻译为“专家”&#xff0c;“内行”Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建&#xff0c;依赖管理和项目信息管理。什么是理想的项目构建&#xff1f; 高度自动化&#xff0c;跨平台&#xff0c;可重用的组件&#xff0c;标准…...

阿里云ESC服务器一次性全部迁移到另一个ESC

摘要&#xff1a; 在云计算时代&#xff0c;服务器迁移是企业优化资源配置、提升业务灵活性的常见需求。本文将详细介绍如何将阿里云ECS&#xff08;Elastic Compute Service&#xff09;服务器一次性迁移到另一个ECS实例。整个迁移过程分为四个关键步骤&#xff1a; 创建自定义…...

搭建分布式Kafka集群

title: 搭建分布式Kafka集群 date: 2024-12-1 14:00:00 categories: - 服务器 tags: - Kafka - 大数据搭建分布式Kafka集群 在主节点上安装Kafka&#xff1b; Kafka使用Zookeeper服务器来存储元数据信息 本次实验环境&#xff1a;Centos 7-2009、Hadoop-3.1.4、JDK 8、Zookeep…...

【后端面试总结】深入解析进程和线程的区别

在操作系统和并发编程中&#xff0c;进程和线程是两个核心概念。它们各自承担着不同的职责&#xff0c;并在多任务处理中发挥着关键作用。本文将从定义、特性、应用场景以及优缺点等多个方面对进程和线程进行详细对比&#xff0c;帮助读者深入理解它们之间的区别。 一、进程和…...

java版电子招投标采购|投标|评标|竞标|邀标|评审招投标系统源码

招投标管理系统是一款适用于招标代理、政府采购、企业采购和工程交易等领域的企业级应用平台。该平台以项目为主线&#xff0c;从项目立项到项目归档&#xff0c;实现了全流程的高效沟通和协作。通过该平台&#xff0c;用户可以实时共享项目数据信息&#xff0c;实现规范化管理…...

SSM 赋能 Vue 助力:新锐台球厅管理系统的设计与实现的辉煌之路

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…...

C++ 并发专题 - C++线程同步的几种方法

一&#xff1a;概述 线程同步是多线程编程中的一个重要概念&#xff0c;它用于控制多个线程之间对共享资源的访问&#xff0c;避免竞态条件&#xff08;race condition&#xff09;和数据不一致的问题。线程同步确保在多线程环境中&#xff0c;多个线程访问共享数据时能够按照某…...

使用Python脚本进行编写批量根据源IP进行查询的语句用于态势感知攻击行为的搜索

使用Python脚本进行编写批量根据源IP进行查询的语句 以下根据ip-list集里面的IP地址&#xff08;可以自行扩充&#xff09;&#xff0c;然后采用srcaddress "{ip}" or 的形式进行打印并存储在路径为&#xff1a;桌面的IOC结果.txt --------------------------代码如…...

Python中的zip/unzip:像拉拉链一样组合数据的艺术

今天让我们一起探讨Python中一个优雅而强大的内置功能&#xff1a; zip 和 unzip 。听名字就知道&#xff0c;它就像我们衣服上的拉链一样&#xff0c;能把两边的数据完美地咬合在一起。 从一个有趣的例子开始 想象你正在开发一个班级管理系统。每个学生都有名字、成绩和评语…...

数电课设·简易数字钟(Quartus Ⅱ)

忽如一夜春风来&#xff0c;千树万树梨花开 —— 《白雪歌诵武判官归京》 岑参 【唐】 目录 简易数字钟 要点剖析&#xff1a; 逐步分析&#xff1a; 端口说明&#xff1a; 代码展示&#xff1a; 分部解释&#xff1a; 代码编译结果&#xff1a; 提醒 &#xff1a; …...

大模型中RAG模型的检索过程是如何实现的?(附最佳实践资料)

RAG模型的检索过程主要涉及以下几个步骤&#xff1a; 向量化&#xff08;Embedding&#xff09;&#xff1a;首先&#xff0c;需要将外部知识库中的文档转换为计算机能够理解的向量形式。这一步骤通常使用预训练的嵌入模型&#xff08;如BERT、GPT等&#xff09;将文本转换为高…...

python:用 sklearn.metrics 评价 K-Means 聚类模型

sklearn 的 metrics 模块提供的聚类模型评价指标如下&#xff1a; ARI 评价法&#xff08;兰德系数&#xff09;: adjusted_rand_score AMI 评价法&#xff08;相互信息&#xff09;: adjusted_mutual_info_score V-measure 评分 : completeness_score FMI 评价法 : fowlkes_m…...

Spring依赖注入不同类型的数据

目录 前言 回顾 注入集合 List与set集合 Map集合 前言 前面学习依赖注入时注入的都是对象&#xff0c;这里记录注入的值为集合的情况 回顾 在注入的时候&#xff0c;如果要注入的属性的值为字符串或基本数据类型&#xff0c;用value即可&#xff1b;如果要注入一个对象的…...

Linux大杂烩!!!

Linux 命令大全 https://www.runoob.com/linux/linux-command-manual.html Linux下打印ASCII字符 ASCII码对照表及转换器 [rootuntifa_80 ~]# printf "\x30\n" 0 [rootuntifa_80 ~]# echo -e "\u0030" 0tar、gzip 打包解压命令 参考文章&#xff1a;ta…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...