亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
1. Lambda 表達(dá)式:告別匿名內(nèi)部類
2. Stream API:以聲明式方式處理數(shù)據(jù)
3. 避免常見陷阱
? 建議這么做:
? 不推薦寫法:
4. 實戰(zhàn)技巧:組合與復(fù)用
首頁 Java java教程 掌握J(rèn)ava 8流和清潔代碼的Lambdas

掌握J(rèn)ava 8流和清潔代碼的Lambdas

Jul 27, 2025 am 02:42 AM
java streams

Lambda表達(dá)式通過簡化匿名內(nèi)部類的寫法,使代碼更簡潔,例如用(p1, p2) -> p1.getName().compareTo(p2.getName())替代Comparator的匿名類,并可結(jié)合方法引用如Person::getName提升可讀性;2. Stream API提供聲明式數(shù)據(jù)處理管道,如通過filter篩選、map轉(zhuǎn)換、sorted排序和collect收集結(jié)果,清晰表達(dá)“要什么”而非“怎么做”,例如users.stream().filter(user -> user.getAge() > 25).map(User::getName).sorted().collect(Collectors.toList());3. 使用時應(yīng)避免常見陷阱,建議鏈?zhǔn)秸{(diào)用分行書寫、盡早過濾、避免副作用、謹(jǐn)慎使用parallelStream;4. 可通過提取Predicate和Function實現(xiàn)邏輯復(fù)用,如Predicate isAdult = user -> user.getAge() >= 18,并支持條件組合如isAdult.and(user -> user.getAge()

Mastering Java 8 Streams and Lambdas for Cleaner Code

Java 8 引入的 StreamsLambdas 徹底改變了我們處理集合數(shù)據(jù)的方式。它們不僅讓代碼更簡潔,還提升了可讀性和維護(hù)性。如果你還在用傳統(tǒng)的 for 循環(huán)遍歷集合、手動過濾和轉(zhuǎn)換數(shù)據(jù),是時候升級你的編碼習(xí)慣了。

Mastering Java 8 Streams and Lambdas for Cleaner Code

下面我們就來一步步掌握這兩個利器,寫出更干凈、更具表達(dá)力的 Java 代碼。


1. Lambda 表達(dá)式:告別匿名內(nèi)部類

Lambda 是一段可以傳遞的代碼塊,它讓函數(shù)式編程在 Java 中成為可能。最常見的使用場景是替代只有一個抽象方法的接口(即函數(shù)式接口)。

Mastering Java 8 Streams and Lambdas for Cleaner Code

舉個例子:排序前 vs 排序后

// 傳統(tǒng)方式:使用匿名內(nèi)部類
Collections.sort(people, new Comparator<Person>() {
    @Override
    public int compare(Person p1, Person p2) {
        return p1.getName().compareTo(p2.getName());
    }
});

// 使用 Lambda 后
Collections.sort(people, (p1, p2) -> p1.getName().compareTo(p2.getName()));

更進(jìn)一步,還可以結(jié)合方法引用:

Mastering Java 8 Streams and Lambdas for Cleaner Code
people.sort(Comparator.comparing(Person::getName));

常用函數(shù)式接口:

  • Predicate<T>:接收一個參數(shù),返回 boolean(用于過濾)
  • Function<T, R>:接收一個參數(shù),返回結(jié)果(用于轉(zhuǎn)換)
  • Consumer<T>:接收一個參數(shù),無返回值(用于執(zhí)行操作)
  • Supplier<T>:無輸入,返回一個值(用于創(chuàng)建對象)

小技巧: Lambda 能省略類型聲明、括號(單參數(shù)時)和大括號(單語句時),但別過度簡化導(dǎo)致可讀性下降。


2. Stream API:以聲明式方式處理數(shù)據(jù)

Stream 不是數(shù)據(jù)結(jié)構(gòu),而是一種操作管道。它從集合或數(shù)組中創(chuàng)建,經(jīng)過中間操作(如 filter、map),最后通過終止操作(如 collect、forEach)產(chǎn)生結(jié)果。

基本結(jié)構(gòu):

list.stream()
    .filter(condition)
    .map(transformation)
    .sorted()
    .collect(Collectors.toList());

實際例子:找出年齡大于 25 的用戶姓名,并按字母排序

List<String> names = users.stream()
    .filter(user -> user.getAge() > 25)
    .map(User::getName)
    .sorted()
    .collect(Collectors.toList());

這段代碼清晰表達(dá)了“我們要什么”,而不是“怎么一步步做”。

常見中間操作:

  • filter(Predicate):篩選符合條件的元素
  • map(Function):轉(zhuǎn)換每個元素
  • flatMap:將流中的每個元素展開為多個元素(比如 List 扁平化)
  • distinct():去重
  • limit(n) / skip(n):分頁控制

常見終止操作:

  • collect():收集結(jié)果(最常用)
  • forEach():遍歷執(zhí)行操作
  • count():計數(shù)
  • anyMatch() / allMatch() / noneMatch():判斷是否存在滿足條件的元素

3. 避免常見陷阱

雖然 Streams 和 Lambdas 很強(qiáng)大,但也容易誤用。

? 建議這么做:

  • 鏈?zhǔn)秸{(diào)用要清晰:每個操作占一行,便于調(diào)試和閱讀。
  • 盡早過濾:把 filter 放在前面,減少后續(xù)操作的數(shù)據(jù)量。
  • 避免副作用:Lambda 中不要修改外部變量,尤其是并發(fā)環(huán)境下。
  • 使用并行流要謹(jǐn)慎parallelStream() 并不總是更快,只有在數(shù)據(jù)量大且操作獨(dú)立時才考慮。

? 不推薦寫法:

users.stream()
     .map(user -> {
         System.out.println(user); // 不推薦:在 map 中做副作用操作
         return user.getName();
     })
     .forEach(System.out::println);

應(yīng)改為:

users.stream()
     .map(User::getName)
     .forEach(System.out::println); // 或拆分邏輯

4. 實戰(zhàn)技巧:組合與復(fù)用

你可以把常用的 Predicate 或 Function 抽出來復(fù)用:

Predicate<User> isAdult = user -> user.getAge() >= 18;
Function<User, String> toName = User::getName;

List<String> adults = users.stream()
    .filter(isAdult)
    .map(toName)
    .collect(Collectors.toList());

甚至可以組合條件:

Predicate<User> isYoungAdult = isAdult.and(user -> user.getAge() < 30);

基本上就這些。Streams 和 Lambdas 的核心思想是:用更少的代碼表達(dá)更多的意圖。一開始可能不習(xí)慣函數(shù)式風(fēng)格,但一旦掌握,你會發(fā)現(xiàn)以前幾十行的邏輯現(xiàn)在幾行就能搞定,而且更安全、更易測試。

不復(fù)雜,但容易忽略細(xì)節(jié)。多寫、多讀、多重構(gòu),你也能寫出“看起來就很高級”的 Java 代碼。

以上是掌握J(rèn)ava 8流和清潔代碼的Lambdas的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

用雅加達(dá)EE在Java建立靜止的API 用雅加達(dá)EE在Java建立靜止的API Jul 30, 2025 am 03:05 AM

SetupaMaven/GradleprojectwithJAX-RSdependencieslikeJersey;2.CreateaRESTresourceusingannotationssuchas@Pathand@GET;3.ConfiguretheapplicationviaApplicationsubclassorweb.xml;4.AddJacksonforJSONbindingbyincludingjersey-media-json-jackson;5.DeploytoaJakar

Java項目管理Maven的開發(fā)人員指南 Java項目管理Maven的開發(fā)人員指南 Jul 30, 2025 am 02:41 AM

Maven是Java項目管理和構(gòu)建的標(biāo)準(zhǔn)工具,答案在於它通過pom.xml實現(xiàn)項目結(jié)構(gòu)標(biāo)準(zhǔn)化、依賴管理、構(gòu)建生命週期自動化和插件擴(kuò)展;1.使用pom.xml定義groupId、artifactId、version和dependencies;2.掌握核心命令如mvnclean、compile、test、package、install和deploy;3.利用dependencyManagement和exclusions管理依賴版本與衝突;4.通過多模塊項目結(jié)構(gòu)組織大型應(yīng)用並由父POM統(tǒng)一管理;5.配

如何將Java MistageDigest用於哈希(MD5,SHA-256)? 如何將Java MistageDigest用於哈希(MD5,SHA-256)? Jul 30, 2025 am 02:58 AM

要使用Java生成哈希值,可通過MessageDigest類實現(xiàn)。 1.獲取指定算法的實例,如MD5或SHA-256;2.調(diào)用.update()方法傳入待加密數(shù)據(jù);3.調(diào)用.digest()方法獲取哈希字節(jié)數(shù)組;4.將字節(jié)數(shù)組轉(zhuǎn)換為十六進(jìn)製字符串以便讀??;對於大文件等輸入,應(yīng)分塊讀取並多次調(diào)用.update();推薦使用SHA-256而非MD5或SHA-1以確保安全性。

CSS暗模式切換示例 CSS暗模式切換示例 Jul 30, 2025 am 05:28 AM

首先通過JavaScript獲取用戶系統(tǒng)偏好和本地存儲的主題設(shè)置,初始化頁面主題;1.HTML結(jié)構(gòu)包含一個按鈕用於觸發(fā)主題切換;2.CSS使用:root定義亮色主題變量,.dark-mode類定義暗色主題變量,並通過var()應(yīng)用這些變量;3.JavaScript檢測prefers-color-scheme並讀取localStorage決定初始主題;4.點(diǎn)擊按鈕時切換html元素上的dark-mode類,並將當(dāng)前狀態(tài)保存至localStorage;5.所有顏色變化均帶有0.3秒過渡動畫,提升用戶

CSS下拉菜單示例 CSS下拉菜單示例 Jul 30, 2025 am 05:36 AM

是的,一個常見的CSS下拉菜單可以通過純HTML和CSS實現(xiàn),無需JavaScript。 1.使用嵌套的ul和li構(gòu)建菜單結(jié)構(gòu);2.通過:hover偽類控制下拉內(nèi)容的顯示與隱藏;3.父級li設(shè)置position:relative,子菜單使用position:absolute進(jìn)行定位;4.子菜單默認(rèn)display:none,懸停時變?yōu)閐isplay:block;5.可通過嵌套實現(xiàn)多級下拉,結(jié)合transition添加淡入動畫,配合媒體查詢適配移動端,整個方案簡潔且無需JavaScript支持,適合大

Python Parse Date String示例 Python Parse Date String示例 Jul 30, 2025 am 03:32 AM

使用datetime.strptime()可將日期字符串轉(zhuǎn)換為datetime對象,1.基本用法:通過"%Y-%m-%d"解析"2023-10-05"為datetime對象;2.支持多種格式如"%m/%d/%Y"解析美式日期、"%d/%m/%Y"解析英式日期、"%b%d,%Y%I:%M%p"解析帶AM/PM的時間;3.可用dateutil.parser.parse()自動推斷未知格式;4.使用.d

VSCODE設(shè)置。 JSON位置 VSCODE設(shè)置。 JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位於用戶級或工作區(qū)級路徑,用於自定義VSCode設(shè)置。 1.用戶級路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級路徑:項目根目錄下的.vscode/settings

崇高文本自動關(guān)閉HTML標(biāo)籤 崇高文本自動關(guān)閉HTML標(biāo)籤 Jul 30, 2025 am 02:41 AM

安裝Emmet插件可實現(xiàn)智能自動閉合標(biāo)籤並支持縮寫語法;2.啟用"auto_match_enabled":true讓Sublime自動補(bǔ)全簡單標(biāo)籤;3.使用Alt .(Win)或Ctrl Shift .(Mac)快捷鍵手動閉合當(dāng)前標(biāo)籤——推薦日常使用Emmet,輕量需求可用後兩種方式組合,效率足夠且設(shè)置簡單。

See all articles