Java中List的forEach用法详解

在 Java 中,List.forEach() 是 Java 8 引入的一种简洁的遍历集合元素的方法。它基于函数式编程思想,接受一个 Consumer 函数式接口作为参数,用于对集合中的每个元素执行操作。

基本语法

java

复制

下载

list.forEach(consumer);

使用示例

1. 使用 Lambda 表达式

java

复制

下载

import java.util.Arrays;
import java.util.List;public class ForEachExample {public static void main(String[] args) {List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript");// 使用 Lambda 表达式遍历languages.forEach(lang -> System.out.println(lang));// 简化版:方法引用(推荐)languages.forEach(System.out::println);}
}
2. 自定义操作

java

复制

下载

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);// 对每个元素进行平方操作
numbers.forEach(n -> {int square = n * n;System.out.print(square + " "); // 输出:1 4 9 16 25
});
3. 修改外部变量(需注意线程安全)

java

复制

下载

List<Integer> nums = Arrays.asList(10, 20, 30);
int[] sum = {0}; // 使用数组绕过 final 限制nums.forEach(n -> sum[0] += n);
System.out.println(sum[0]); // 输出:60

关键注意事项

  1. 无法中断/跳过
    forEach 不支持 break 或 continue,如需条件终止,请改用传统循环或 Stream API:

    java

    复制

    下载

    // 使用 Stream 实现条件过滤
    languages.stream().filter(lang -> lang.startsWith("J")).forEach(System.out::println); // 输出 Java, JavaScript
  2. 执行顺序
    对 ArrayList 等有序集合按索引顺序执行,对 HashSet 等无序集合顺序不确定。

  3. 并发修改风险
    禁止在遍历中修改集合结构(增删元素),否则会抛出 ConcurrentModificationException

    java

    复制

    下载

    // 错误示例:尝试删除元素
    List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));
    list.forEach(n -> {if (n == 2) list.remove(n); // 抛出异常!
    });
  4. 与 for-each 循环的区别

    特性list.forEach()传统 for-each 循环
    语法简洁度⭐⭐⭐⭐⭐
    支持 break/continue✔️
    异常处理需在 Lambda 内处理可在外部处理
    性能接近接近

何时使用?

  • ✅ 适合简单遍历操作(如打印、计算)

  • ✅ 需要代码简洁时

  • ❌ 需要中断循环或跳过元素时

  • ❌ 需要修改集合结构时

完整示例

java

复制

下载

import java.util.*;public class AdvancedExample {public static void main(String[] args) {List<String> colors = new ArrayList<>();colors.add("Red");colors.add("Green");colors.add("Blue");// 1. 打印元素colors.forEach(color -> System.out.println(color.toUpperCase()));// 2. 条件操作(无过滤)colors.forEach(color -> {if (color.length() > 3) {System.out.println("Long color: " + color);}});// 3. 修改外部对象StringBuilder result = new StringBuilder();colors.forEach(result::append); // 拼接字符串System.out.println(result); // 输出:RedGreenBlue}
}

💡 提示:对于复杂操作(过滤、映射等),推荐结合 Stream API 使用,能获得更强大的功能:

java

复制

下载

list.stream().filter(s -> s.length() > 4).map(String::toUpperCase).forEach(System.out::println);
// 生成试剂@Overridepublic List<Reagent> generate(List<Integer> idList) {if (!idList.isEmpty()) {List<Integer> reagentIdList = new ArrayList<>();idList.forEach(ckDetailId -> {// id 接收器,用于接收插入数据时生成的自增 id 值Map<String, Object> idHolder = new HashMap<>();// 插入数据reagentMapper.insertByCkDetailId(ckDetailId, idHolder);// 获取插入数据后的自增 id 值(键名 generatedId 与 XML 配置一致  idHolder.get("generatedId")  keyProperty="idHolder.generatedId")Object idObj = idHolder.get("generatedId");// 类型安全转换 Object -> LongLong reagentId = TypeUtils.safeToLong(idObj);reagentIdList.add(reagentId.intValue());});// 返回生成的试剂return reagentMapper.selectByIds(reagentIdList);} else {// 返回空集合return new ArrayList<>();}}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/86493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…

计算机视觉与深度学习 | 基于MATLAB的相机标定

基于MATLAB的相机标定:原理、步骤与代码实现 相机标定 基于MATLAB的相机标定:原理、步骤与代码实现MATLAB相机标定完整流程1. 准备工作2. 采集标定图像3. 导入图像并检测角点4. 生成世界坐标5. 执行相机标定6. 分析标定结果7. 应用标定结果校正图像相机标定关键概念相机参数类…

物联网专业核心课程以及就业方向

物联网专业作为信息技术与产业应用深度融合的交叉学科&#xff0c;其课程体系覆盖硬件、软件、网络、数据等全链条技术&#xff0c;就业方向则随智能技术普及呈现多元化趋势。以下是基于最新行业动态与教育实践的系统分析&#xff1a; &#x1f4da; 一、物联网专业核心课程体系…

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…

线性代数证明:把行列式的某一行(列)的k倍加到另一行(列),行列式的值不变

线性代数证明 把行列式的某一行&#xff08;列&#xff09;的k倍加到另一行&#xff08;列&#xff09;&#xff0c;行列式的值不变&#xff1a; 注意五角星的位置要用到另一条性质&#xff1a;若行列式的某一行&#xff08;列&#xff09;的元素都是两数之和&#xff0c;则可以…

webrtc 在线测试, 如何在线拉流测试

1. 如下所示&#xff0c;使用腾讯提供的网页即可&#xff0c;非常赞&#xff0c;测试直播拉流 webrtc协议 WebRTC Player Demo 2.截图&#xff1a;

基于Flask前后端分离智慧安防小区系统

基于Flask前后端分离智慧安防小区系统 本项目是一个基于前后端分离架构的智慧安防小区管理系统&#xff0c;采用现代化的技术栈和完善的功能设计&#xff0c;旨在提供一个高效、安全的小区管理解决方案。 技术架构 前端技术栈 基于Vue 3框架开发参考Geeker-Admin项目的基础…

深入解析 Linux 死锁:原理、原因及解决方案

深入解析 Linux 死锁&#xff1a;原理、原因及解决方案 目录 **深入解析 Linux 死锁&#xff1a;原理、原因及解决方案**前言&#xff1a;一次凌晨 3 点的 “服务器崩溃”&#xff0c;揭开死锁的致命性一、死锁的基础&#xff1a;资源与竞争的 “导火索”1.1 资源&#xff1a;死…

C学习--内存管理

#灵感# 当计算机执行一个程序时&#xff0c;必须有一种方法来存储程序本身和运算所得的数据。 总的来讲&#xff0c;计算机硬件中任何能够存储和检索信息的部分都是存储设备。当前运行的程序存放的存储器称为主存储器&#xff08;primary storage&#xff09;&#xff0c;常常…

使用 Docker Compose 安装 PostgreSQL 16

前面是指南&#xff0c;后面是实际工作日志。 1. 创建 docker-compose.yml 文件 yaml 复制 下载 version: 3.9 services:postgres:image: postgres:16container_name: postgres-16environment:POSTGRES_USER: your_username # 替换为你的用户名POSTGRES_PASSWORD: your…

从数据报表到决策大脑:AI重构电商决策链条

在传统电商运营中&#xff0c;决策链条往往止步于“数据报表层”&#xff1a;BI工具整合历史数据&#xff0c;生成滞后一周甚至更久的销售分析&#xff0c;运营团队凭经验预判需求。当爆款突然断货、促销库存积压时&#xff0c;企业才惊觉标准化BI的决策时差正成为增长瓶颈。 一…

SpringBoot 自动化部署实战:CI/CD 整合方案与避坑指南

引言 在微服务架构盛行的今天&#xff0c;SpringBoot 凭借其开箱即用的特性成为 Java 后端开发的主流框架。然而&#xff0c;随着项目规模扩大&#xff0c;手动部署的效率瓶颈逐渐显现。本文将结合 GitLab CI/CD、Jenkins 等工具&#xff0c;深入探讨 SpringBoot 项目的自动化部…

力扣HOT100之二分查找:35. 搜索插入位置

这道题属于是二分查找的入门题了&#xff0c;我依稀记得一些二分查找的编码要点&#xff0c;但是最后还是写出了一个死循环&#xff0c;无语(ˉ▽ˉ&#xff1b;)…又回去看了下自己当时的博客和卡哥的视频&#xff0c;这才发现自己分情况只分了两种&#xff0c;最后导致死循环…

VS创建Qt项目,Qt的关键字显示红色波浪线解决方法

如图所示&#xff0c;VS2017新创建的Qt项目&#xff0c;编译正常&#xff0c;关键字显示识别失败&#xff0c;显示红色波浪线&#xff0c;编译运行没问题。 解决方法&#xff1a; 如下图所示&#xff0c;C/C -> 常规 -> 附加包含目录 ->添加Qt的Include路径 如下图…

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…

ccf中学生计算机程序设计入门篇课后题p164页test(1)-2 输入一个数,统计这个数二进制中1的个数

include <iostream> using namespace std;int main() {int x;int n 0;// 输入数据cin >> x;// 统计x二进制中1的个数for (n 0; x ! 0; x & x - 1) {n;}// 输出结果cout << n << endl;return 0; }程序解释&#xff1a; 输入&#xff1a;程序从标…

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…