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
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86493.shtml
英文地址,請注明出處:http://en.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;無人機的“黑飛”&…