国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

震驚無數(shù) Java 開發(fā)者:for vs Stream,原來你一直用錯(cuò)了!

開發(fā) 前端
到底什么時(shí)候用 for?什么時(shí)候用 Stream?實(shí)際上邏輯一點(diǎn)都不復(fù)雜,只是我們平時(shí)不系統(tǒng)地整理。今天這篇,就帶你一次講透。

在 /src/main/java/com/icoderoad/app/ 目錄寫代碼那天,我遇到一個(gè)特別簡單但又典型的場景: ——從用戶集合里挑出 VIP,把名字轉(zhuǎn)成大寫,然后打印。

照著直覺,我寫了個(gè) for-each 但敲了幾行又停住了:

“欸…現(xiàn)在不是都流行 Stream 嗎?我是不是該換成 Stream 才算現(xiàn)代寫法?”

結(jié)果我查了一堆討論,發(fā)現(xiàn)不僅是我,很多 Java 開發(fā)者都遇到同樣的“靈魂拷問”:

到底什么時(shí)候用 for?什么時(shí)候用 Stream?

實(shí)際上邏輯一點(diǎn)都不復(fù)雜,只是我們平時(shí)不系統(tǒng)地整理。今天這篇,就帶你一次講透。

先用一個(gè)例子打開思路

先來準(zhǔn)備一個(gè)簡單的數(shù)據(jù),在 /src/main/java/com/icoderoad/demo/Main.java 里:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Anna");

目標(biāo):篩出所有以 “A” 開頭的名字,轉(zhuǎn)成大寫并輸出。

1)使用經(jīng)典 for-each 的寫法

for (String name : names) {
    if (name.startsWith("A")) {
        System.out.println(name.toUpperCase());
    }
}

特點(diǎn):逐步執(zhí)行,很像“拆步驟”。

2)同樣邏輯用 Stream 怎么寫?

names.stream()
     .filter(name -> name.startsWith("A"))
     .map(String::toUpperCase)
     .forEach(System.out::println);

特點(diǎn):像在搭建一條“加工流水線”。

for 和 Stream 的區(qū)別,到底差在哪?

這不是語法之爭,而是 編程范式 的差異:

對(duì)比項(xiàng)

for

Stream

編程方式

命令式:一步步告訴機(jī)器“怎么做”

聲明式:告訴機(jī)器“我需要什么”

代碼風(fēng)格

邏輯分散

邏輯連貫

代碼長度

簡單功能短

復(fù)雜功能反而更短

可讀性

簡單任務(wù)更清晰

復(fù)雜數(shù)據(jù)處理更清晰

能否 break?

? 可

? 不能直接 break(但有短路操作)

并行處理

要自己管理線程

.parallelStream() 一行搞定

性能(小數(shù)據(jù))

更快

有函數(shù)式開銷

性能(大數(shù)據(jù))

手寫并行復(fù)雜

自動(dòng)并行潛力巨大

一句話總結(jié):

for 靈活、可控;Stream 高層次、適合流水線式處理。

這 8 種情況,優(yōu)先使用 for 循環(huán)

如果你的代碼位于 /src/main/java/com/icoderoad/service/...,出現(xiàn)以下場景,直接用 for 更穩(wěn)妥。

簡單的遍歷打印

for (String item : list) {
    System.out.println(item);
}

Stream 寫反而更啰嗦。

需要中途退出(break)

for (File file : files) {
    if (file.length() == 0) {
        isEmpty = true;
        break;
    }
}

Stream 不能直接用 break。

復(fù)雜條件組合判斷

for (Order order : orders) {
    if (order.isValid()
        && (order.isVip() || order.getAmount() > 1000)
        && !order.isCancelled()) {
        processOrder(order);
    }
}

復(fù)雜判斷用 Stream 會(huì)變得很難讀。

需要維護(hù)多個(gè)外部狀態(tài)變量

int successCount = 0;
int failCount = 0;
List<Result> results = new ArrayList<>();


for (Task task : tasks) {
    try {
        Result result = executeTask(task);
        results.add(result);
        successCount++;
    } catch (Exception e) {
        failCount++;
        logger.error("任務(wù)執(zhí)行失敗", e);
    }
}

Stream 不鼓勵(lì)這種副作用操作。

必須使用索引(第 N 個(gè)元素)

for (int i = 0; i < list.size(); i++) {
    if (i % 2 == 0) {
        process(list.get(i));
    }
}

Stream 沒有天然的索引支持。

循環(huán)體邏輯復(fù)雜、步驟很多

for (User user : users) {
    Profile profile = buildProfile(user);
    validateProfile(profile);
    saveToDatabase(profile);
    sendNotification(user);
}

流程化邏輯更適合 for。

極致性能要求(如算法、游戲)

for (int i = 0; i < MAX_ITERATIONS; i++) {
    result += array[i] * factor;
}

這里 Stream 只會(huì)拖后腿。

需要修改原集合

for (int i = 0; i < list.size(); i++) {
    if (shouldRemove(list.get(i))) {
        list.remove(i);
        i--;
    }
}

Stream 不允許變更源集合。

遇到這 8 類任務(wù),Stream 才是最佳選擇

當(dāng)你的文件位于 /src/main/java/com/icoderoad/analysis/...,并遇到以下情況時(shí),Stream 寫法更像“天然的工具”。

流水線式數(shù)據(jù)處理(過濾 → 轉(zhuǎn)換 → 排序 → 截取)

List<Product> results = products.stream()
    .filter(p -> p.getStock() > 0)
    .filter(p -> p.getPrice() < 100)
    .sorted(Comparator.comparing(Product::getPrice))
    .limit(10)
    .collect(Collectors.toList());

屬性提取、結(jié)構(gòu)轉(zhuǎn)換

List<String> names = employees.stream()
    .map(Employee::getName)
    .collect(Collectors.toList());

統(tǒng)計(jì)分析(平均值、最大值…)

DoubleSummaryStatistics stats = employees.stream()
    .mapToDouble(Employee::getSalary)
    .summaryStatistics();

分組 / 分類

Map<Department, List<Employee>> byDept =
    employees.stream().collect(Collectors.groupingBy(Employee::getDepartment));


Map<Boolean, List<Employee>> partitioned =
    employees.stream().collect(Collectors.partitioningBy(e -> e.getSalary() > 10000));

去重、排序

List<String> uniqueNames = employees.stream()
    .map(Employee::getName)
    .distinct()
    .sorted()
    .collect(Collectors.toList());

查找、匹配

boolean hasManager = employees.stream()
    .anyMatch(e -> "經(jīng)理".equals(e.getPosition()));


Optional<Employee> firstRich = employees.stream()
    .filter(e -> e.getSalary() > 50000)
    .findFirst();

拼接與匯總

String namesStr = employees.stream()
    .map(Employee::getName)
    .collect(Collectors.joining(", "));


double totalSalary = employees.stream()
    .mapToDouble(Employee::getSalary)
    .sum();

自動(dòng)并行處理(處理大數(shù)據(jù)極香)

List<String> results = bigList.parallelStream()
    .map(this::expensiveOperation)
    .collect(Collectors.toList());

只需要把 .stream() 改成 .parallelStream() 而 for 想實(shí)現(xiàn)同樣的并行?線程池、鎖、合并結(jié)果……頭都大。

關(guān)于 Stream 的常見誤解

誤區(qū) 1:Stream 一定比 for 慢?

錯(cuò)誤。

真實(shí)情況:

  • 小數(shù)據(jù):for 快一點(diǎn)
  • 大數(shù)據(jù) + 并行:Stream 可能快很多
  • 大多數(shù)業(yè)務(wù)場景:真正影響的是可讀性,不是性能

誤區(qū) 2:Stream 不能提前退出?

雖然不能 break,但 Stream 有短路操作:

  • findFirst()
  • anyMatch()
  • allMatch()
  • noneMatch()

這些方法會(huì)在達(dá)到條件后自動(dòng)停止。

誤區(qū) 3:Stream 可以修改外部變量?

int count = 0;
list.stream().forEach(item -> {
    if (item.isValid()) {
        count++; //  編譯錯(cuò)誤,count 必須 final
    }
});

Stream 原則:無副作用

正確計(jì)數(shù)方式是:

long count = list.stream()
                 .filter(Item::isValid)
                 .count();

實(shí)戰(zhàn)場景選擇建議(最容易記住的部分)

需求

推薦寫法

簡單遍歷、打印

for

需要索引

for

需要 break

for

過濾 + 轉(zhuǎn)換 + 排序

Stream

分組 / 統(tǒng)計(jì) / 匯總

Stream

大數(shù)據(jù)并行

parallelStream

團(tuán)隊(duì)新人多、邏輯簡單

for

代碼需表達(dá)“數(shù)據(jù)加工流水線”

Stream

結(jié)語:for 與 Stream,不是替代,而是雙工具箱

很多文章把 for 和 Stream 對(duì)立起來,其實(shí)沒有必要。

真正的高手不會(huì)迷信某種寫法,而是:

根據(jù)場景選擇最合適、最可讀、最維護(hù)友好的方式。

  • 想要靈活性、可控性、性能極致 → 用 for
  • 想要簡潔、優(yōu)雅、表達(dá)數(shù)據(jù)流動(dòng)過程 → 用 Stream

當(dāng)你理解它們背后的編程思想后,再也不會(huì)糾結(jié)哪個(gè)“更現(xiàn)代”,因?yàn)椋?/span>

能解決問題、代碼清晰,就是最好的寫法。

責(zé)任編輯:武曉燕 來源: 路條編程
相關(guān)推薦

2021-12-15 10:20:08

緩存架構(gòu)開發(fā)

2025-07-24 06:49:54

2025-10-23 11:56:45

2012-06-13 01:23:30

開發(fā)者程序員

2018-06-05 16:35:11

微軟GitHub開發(fā)者

2009-05-25 10:18:29

PHPLAMPGLAMMP

2016-03-25 09:29:24

Apple開發(fā)工具開發(fā)者

2018-07-18 09:12:05

開發(fā)者Java工具

2024-10-14 13:20:00

2015-06-16 13:04:35

C#開發(fā)者JAVA 開發(fā)者

2024-12-06 08:20:22

BigDecimal浮點(diǎn)數(shù)初始化

2015-08-19 13:35:56

編程代碼審查開發(fā)者

2012-02-21 22:27:56

AndroidQtQt Mobility

2024-03-05 19:17:37

2014-03-13 11:08:42

結(jié)對(duì)編程代碼審查

2024-12-27 09:29:09

2024-12-02 00:00:02

Svelte 5effect?數(shù)據(jù)

2015-10-16 10:17:55

復(fù)盤手游80天環(huán)游地球

2025-08-08 08:11:57

localhost網(wǎng)絡(luò)開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

在线观看导航| 欧美家庭影院| 国产精品精品国产色婷婷| 国产一区二区在线免费| 国产精品欧美三级在线观看| 国产精品视频久久久| 日韩久久精品| 国产成人精品免费视频大全最热 | 一区二区福利视频| 亚洲女同志freevdieo| 一区二区三区高清国产| 九色精品蝌蚪| 国产精品亚洲一区二区三区| 亚洲无线一线二线三线区别av| 国产一区二区无遮挡| 国产传媒日韩欧美成人| 国产精品久久一区二区三区| 欧美精品hd| 欧美成人video| 日韩在线无毛| 国产综合自拍| 欧美一区二区三区免费大片| aⅴ在线视频男人的天堂| 欧美大片日本大片免费观看| 成人免费直播| 午夜精品久久久久久久白皮肤 | 亚洲精品黄网在线观看| 精品国产乱码久久久久久樱花| 日本亚洲精品| 日本综合字幕| 久久久999精品| 四虎4545www国产精品| 69av一区二区三区| 亚洲免费毛片| 91成人免费观看网站| 欧美天堂在线| 中文字幕欧美日韩一区二区三区| 91久久一区二区| h网站久久久| 国产伦精品一区| 欧美三级小说| 欧美日韩中文不卡| www.欧美精品一二三区| 高清欧美日韩| 欧美激情一区二区久久久| 日韩制服一区| 久久精品91久久香蕉加勒比 | 日本三级免费网站| 亚洲69av| 成人免费在线视频网址| 99精品视频在线| 91精品久久久久久久久久另类| 综合色天天鬼久久鬼色| 国产精品99久久久久久董美香 | 日日骚一区二区网站| 日韩中文字幕区一区有砖一区| 97在线看福利| 欧美日韩日本国产亚洲在线| 欧美第一黄网| 另类综合日韩欧美亚洲| 欧美日韩免费观看一区| 精品亚洲成a人在线观看| 黑人糟蹋人妻hd中文字幕| 亚洲天堂免费看| 亚洲网站情趣视频| 欧美国产日韩在线观看| 日韩av一区二区三区在线观看| 日韩高清一区二区| 国产无套内射久久久国产| 亚洲日本在线a| 91亚洲天堂| 国产精品视频色| 大荫蒂欧美视频另类xxxx| 自拍偷拍欧美专区| 欧美性天天影视| 国产精品美女在线播放| 国模精品一区二区三区色天香| 美女视频亚洲色图| 国产盗摄视频在线观看| 欲香欲色天天天综合和网| 91av国产在线| 亚洲一级网站| 任我爽在线视频精品一| www.亚洲色图.com| jizz18欧美| 色欧美乱欧美15图片| 九七伦理97伦理| 日韩一区二区三区视频在线观看 | 手机福利在线| 综合久久综合久久| 成年人视频网站在线| 成人黄色av播放免费| 一区二区三区成人在线视频| 日韩成人免费| 国产在线观看黄| 日韩精品久久久免费观看| 亚洲激情第一页| 国产欧美久久久精品影院| 国产成人黄色| 国产不卡在线| 一女被多男玩喷潮视频| 国模视频一区二区三区| 欧美色电影在线| 成人免费视频app| 国产精品45p| 日本高清中文字幕在线| 欧美aaa在线观看| 国产精品∨欧美精品v日韩精品| 亚洲欧美三级在线| 韩日视频一区| 国产精品久久久久久久乖乖| 成人视屏免费看| yellow字幕网在线| 日韩一区在线视频| 黄色美女久久久| 国产美女无遮挡网站| 亚洲第一中文字幕| 不卡在线视频中文字幕| 麻豆视频网站在线观看| 久久视频在线播放| 国产麻豆午夜三级精品| 亚洲国产精品91| 亚洲欧美日韩在线一区| 一区二区三区中文| 亚洲另类第一页| 美女av一区二区| 亚洲一级黄色| 韩国三级在线观看久| 国产欧美 在线欧美| 国产精品久久久久永久免费观看| 国内精品久久久久影院优| 亚洲大片在线| 在线视频国产三级| 福利视频一区二区三区四区| 国产福利久久| 亚洲永久在线观看| 国产精品久久久久久久久久久久 | 97精品国产97久久久久久粉红| 国产精品久久久久久久久久三级| 日日狠狠久久偷偷四色综合免费| 欧美成人a视频| 天天做天天摸天天爽国产一区| 中文字幕日本不卡| 久久亚洲欧美国产精品乐播| 丁香网亚洲国际| 国产伦精品一区二区三区视频青涩 | 日韩国产欧美精品一区二区三区| jlzzjlzz国产精品久久| 国产成人丝袜美腿| 青青草国产精品97视觉盛宴| 国产精品日本| 要久久爱电视剧全集完整观看| 成人影院入口| 在线中文字幕-区二区三区四区| 在线免费观看黄色av| 免费a在线看| 成人激情视屏| av在线网页| 日本综合在线| 川上优av中文字幕一区二区| av片在线观看免费| 国产一二在线播放| 麻豆国产精品| 999成人网| 91在线免费播放| 亚洲精品欧美在线| 337p亚洲精品色噜噜| 日韩一区二区三区视频在线| 久久天天躁狠狠躁老女人| 欧美国产日韩一区二区在线观看| 伊人久久久久久久久久久| 亚洲大胆人体av| 亚洲成人黄色网址| 5252色成人免费视频| 欧美中文字幕视频| 国内精品视频在线播放| 新呦u视频一区二区| 一区二区三区视频国产日韩| 亚洲精品日产| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲精品美女91| 国产免费av在线| 欧美三级电影网址| 美国毛片一区二区三区| 亚洲第一在线综合网站| 五月天一区二区| 欧美老女人xx| 伊人情人网综合| 91麻豆一二三四在线| 欧美性理论片在线观看片免费| 欧美午夜影院| 亚洲免费在线电影| 亚洲电影av在线| 精品国产一区二区三区四区vr| 色佬视频在线观看| 白嫩白嫩国产精品| 久久影音资源网| 中文字幕欧美亚洲| 免费看国产曰批40分钟| 999在线精品|