Lambda 表達式的語法:

在 Java 中,Lambda 表達式(也稱為匿名方法)是一種簡潔的表示方法接口(Functional Interface)實現的方式。它是 Java 8 引入的特性,目的是提高代碼的簡潔性和可讀性。

Lambda 表達式的語法:

Lambda 表達式的基本語法結構如下:

(parameters) -> expression
  • parameters: 輸入參數,類型可以省略,編譯器會根據上下文推斷。
  • ->: Lambda 表達式的箭頭符號,用于分隔參數和方法體。
  • expression: 方法體,方法體可以是一個簡單的表達式或者是一個代碼塊。

Lambda 表達式的主要特征:

  1. 簡化代碼:使代碼更加簡潔。
  2. 支持函數式編程:Lambda 表達式使得 Java 可以實現函數式編程。
  3. 支持傳遞行為:Lambda 讓代碼行為可以作為參數傳遞。

Lambda 表達式的基本用法

Lambda 表達式通常用于實現 Java 中的 函數式接口(Functional Interface)。函數式接口是只包含一個抽象方法的接口,例如:RunnableComparatorCallable 等。

示例 1: 使用 Lambda 表達式替代匿名內部類

我們首先看一個使用匿名內部類的代碼示例,然后用 Lambda 表達式進行簡化。

1.1. 匿名內部類示例:

假設我們有一個 Runnable 接口的實例,用來創建一個線程。

public class LambdaExample {public static void main(String[] args) {// 使用匿名內部類實現Runnable接口Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("Hello from the thread!");}};// 創建線程并啟動Thread thread = new Thread(runnable);thread.start();}
}
1.2. 使用 Lambda 表達式簡化:

Lambda 表達式可以將上述匿名內部類簡化為更簡潔的形式:

public class LambdaExample {public static void main(String[] args) {// 使用 Lambda 表達式簡化Runnable runnable = () -> System.out.println("Hello from the thread!");// 創建線程并啟動Thread thread = new Thread(runnable);thread.start();}
}

在這個例子中,Lambda 表達式 () -> System.out.println("Hello from the thread!") 替代了匿名內部類。

示例 2: 使用 Lambda 表達式處理集合(List)

Java 8 引入了流(Stream)API,可以非常方便地對集合進行操作。我們可以使用 Lambda 表達式和流 API 對集合進行過濾、排序和遍歷等操作。

2.1. 傳統方式:使用 for 循環遍歷集合
import java.util.Arrays;
import java.util.List;public class LambdaExample {public static void main(String[] args) {List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");// 使用傳統的 for 循環遍歷集合for (String name : names) {System.out.println(name);}}
}
2.2. 使用 Lambda 表達式與 Stream API 遍歷集合

使用 Lambda 表達式和 forEach 方法來遍歷集合:

import java.util.Arrays;
import java.util.List;public class LambdaExample {public static void main(String[] args) {List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");// 使用 Lambda 表達式與 forEach 遍歷集合names.forEach(name -> System.out.println(name));}
}

forEachStream 接口的一個方法,可以接受一個 Consumer 類型的參數,而 Consumer 接口只有一個方法 accept,所以我們可以傳入 Lambda 表達式來替代匿名內部類。

示例 3: 使用 Lambda 表達式進行排序

Lambda 表達式可以用來簡化比較器的實現。

3.1. 使用匿名內部類排序:
import java.util.Arrays;
import java.util.Comparator;public class LambdaExample {public static void main(String[] args) {String[] names = {"Alice", "Bob", "Charlie", "David"};// 使用匿名內部類排序Arrays.sort(names, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return o1.compareTo(o2);}});System.out.println(Arrays.toString(names));}
}
3.2. 使用 Lambda 表達式排序:
import java.util.Arrays;public class LambdaExample {public static void main(String[] args) {String[] names = {"Alice", "Bob", "Charlie", "David"};// 使用 Lambda 表達式排序Arrays.sort(names, (o1, o2) -> o1.compareTo(o2));System.out.println(Arrays.toString(names));}
}

示例 4: 函數式接口的使用

Java 8 引入了大量的函數式接口(例如 Predicate, Function, Consumer, Supplier 等)。我們可以通過 Lambda 表達式來實現這些接口。

4.1. 使用 Lambda 表達式實現 Predicate 接口

Predicate 接口用于判斷某個條件是否成立,它有一個抽象方法 test

import java.util.function.Predicate;public class LambdaExample {public static void main(String[] args) {// 使用 Lambda 表達式創建 Predicate 接口實例Predicate<Integer> isEven = num -> num % 2 == 0;System.out.println(isEven.test(4));  // trueSystem.out.println(isEven.test(5));  // false}
}
4.2. 使用 Lambda 表達式實現 Function 接口

Function 接口用于將輸入參數轉換為輸出結果,它有一個抽象方法 apply

import java.util.function.Function;public class LambdaExample {public static void main(String[] args) {// 使用 Lambda 表達式創建 Function 接口實例Function<Integer, Integer> square = num -> num * num;System.out.println(square.apply(4));  // 16System.out.println(square.apply(5));  // 25}
}

小結:

  • Lambda 表達式使代碼更加簡潔。
  • 適用于實現 函數式接口,即只有一個抽象方法的接口。
  • Lambda 表達式可以替代匿名內部類,使得代碼更加簡潔易懂。
  • Java 8 的 Stream API 與 Lambda 表達式結合,可以非常方便地處理集合。

通過這些示例,你可以看到如何在 Java 中使用 Lambda 表達式提高代碼的簡潔性和可讀性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898354.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898354.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898354.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#零基礎入門篇(18. 文件操作指南)

## 一、文件操作基礎 在C#中&#xff0c;文件操作主要通過System.IO命名空間中的類來實現&#xff0c;例如File、FileStream、FileInfo等。 ## 二、常用文件操作方法 ### &#xff08;一&#xff09;文件讀取 1. **使用File.ReadAllText方法讀取文件內容為字符串** …

每日一題--內存池

內存池&#xff08;Memory Pool&#xff09;是一種高效的內存管理技術&#xff0c;通過預先分配并自主管理內存塊&#xff0c;減少頻繁申請/釋放內存的系統開銷&#xff0c;提升程序性能。它是高性能編程&#xff08;如游戲引擎、數據庫、網絡服務器&#xff09;中的核心優化手…

【Linux系統】Linux進程終止的N種方式

Linux系列 文章目錄 Linux系列前言一、進程終止的概念二、進程終止的場景三、進程終止的實現3.1 程序退出碼3.2 運行完畢結果正常3.3 運行完畢結果異常3.4 程序異常退出 總結 前言 進程終止是操作系統中&#xff0c;進程的一個重要階段&#xff0c;他標志著進程生命周期的結束…

正則表達式引擎深入探討

正則表達式引擎&#xff08;Regular Expression Engine&#xff09;是正則表達式得以“活起來”的核心。它是一個精密的軟件組件&#xff0c;負責接收正則表達式和輸入文本&#xff0c;解析模式并執行匹配或替換操作&#xff0c;最終輸出結果——可能是簡單的“是否匹配”&…

java面試題,什么是動態代理?、動態代理和靜態代理有什么區別?說一下反射機制?JDK Proxy 和 CGLib 有什么區別?動態代理的底層

什么是動態代理&#xff1f; 動態代理是在程序運行期&#xff0c;動態的創建目標對象的代理對象&#xff0c;并對目標對象中的方法進行功能性增強的一種技術。 在生成代理對象的過程中&#xff0c;目標對象不變&#xff0c;代理對象中的方法是目標對象方法的增強方法。可以理解…

【工具類】Java的 LocalDate 獲取本月第一天和最后一天

博主介紹&#xff1a;?全網粉絲22W&#xff0c;CSDN博客專家、Java領域優質創作者&#xff0c;掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域? 技術范圍&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大數據、物…

嵌入式開發之STM32學習筆記day06

基于STM32F103C8T6的開發實踐——從入門到精通01 1. 引言 STM32系列微控制器是STMicroelectronics推出的一款高性能、低功耗的32位微控制器&#xff0c;廣泛應用于嵌入式系統中。STM32F103C8T6是其中非常受歡迎的一款&#xff0c;憑借其強大的性能、豐富的外設接口和低廉的價格…

學習使用 Git 和 GitHub 開發項目的教程推薦

Git 和 GitHub 是現代軟件開發中不可或缺的工具&#xff0c;無論你是個人開發者還是團隊成員&#xff0c;掌握它們都能極大提升效率。本文精選了一系列優質教程資源&#xff0c;涵蓋從基本 Git 命令到進階多人協作的內容。這些教程既有文字形式&#xff0c;也有視頻或交互式資源…

golang中的接口

1.簡介 在go中的接口是以一種類型,一種抽象的類型。接口(interface)是一組函數method的集合,go中的接口不能包含任何變量。在go中接口中的所有方法都沒有方法體,接口定義了一個對象的行為規范,只定義規范不實現。接口體現了程序的多態和高內聚低耦合的思想。go中的接口也是…

AI 浪潮下,職場的變與不變

如今&#xff0c;AI 如迅猛颶風&#xff0c;極速席卷職場&#xff0c;徹底攪亂了原有的秩序。你是否留意到&#xff0c;身邊的工作方式正悄然生變&#xff1f;今天&#xff0c;【探星 AI 研習社】就為大家深入剖析&#xff0c;AI 如何改寫職場劇本。無論你是大學生還是職場資深…

匯川EASY系列之以太網通訊(MODBUS_TCP做主站)

匯川Easy系列以太網通訊中(MODBUSTCP,plc做主站),終于可以不用使用指令就可以完成了,全程通過簡單的配置就可通訊。本文將通過EASY系列PLC與調試助手之間完成此操作。具體演示如下; 關于主站和從站的介紹 A/請求:即主動方 向被動方發送的一個要求的信息。 B/主站:發…

npm error gyp info

在使用 npm 安裝 Node.js 包時&#xff0c;可能會遇到各種錯誤&#xff0c;其中 gyp 錯誤是比較常見的一種。gyp 是 Node.js 的一個工具&#xff0c;用于編譯 C 代碼。這些錯誤通常發生在需要編譯原生模塊的 npm 包時。下面是一些常見的原因和解決方法&#xff1a; 常見原因及…

Oracle 19C分區表索引小結

一、大佬說&#xff08;楊廷琨&#xff09; LOCAL索引的最大好處是在進行分區操作&#xff0c;比如TRUNCATE PARTITION, DROP PARTITION時&#xff0c;不會出現索引INVALID的情況&#xff0c;不影響索引的可用性。由于GLOBAL索引所有的數據存儲在一起&#xff0c;因此當執行分…

AutoHub場景演示|帶您領略智能自動化操作的全新體驗

AutoHub是一款由OpenCSG推出的基于前沿大型語言模型&#xff08;LLM&#xff09;的瀏覽器自動化工具&#xff0c;旨在通過智能對話交互和自動化技術&#xff0c;幫助用戶更高效地瀏覽網頁和完成任務。它不僅能夠自動化繁瑣的網頁操作&#xff0c;還能夠為用戶提供精準的信息檢索…

深入解析 Linux 聲卡驅動:從架構到實戰

在嵌入式 Linux 設備中&#xff0c;音頻功能的實現離不開 Linux 聲卡驅動。而 ALSA (Advanced Linux Sound Architecture) 作為 Linux 內核的音頻框架&#xff0c;提供了一整套 API 和驅動模型&#xff0c;幫助開發者快速集成音頻功能。本篇文章以 WM8960 音頻編解碼器&#xf…

thinkphp5模型查詢數據庫,查出來的字段直接修改成另外的名字

在ThinkPHP5中,如果你希望在查詢數據庫時將返回的字段名直接修改為其他名稱,可以通過以下幾種方式實現: 方法1:使用 field 方法指定字段別名 在查詢時通過 field 方法直接為字段指定別名(使用 AS 關鍵字)。 示例代碼: // 使用Db類查詢 $result = Db::name(user)->…

關于前端指令

在前端開發中&#xff0c;指令&#xff08;Directives&#xff09;通常指在框架中使用的一種特殊的語法或機制&#xff0c;用于擴展 HTML 的功能。常見的指令主要存在于前端框架中&#xff0c;如 Vue.js、Angular 等。下面我們將分別介紹 Vue.js 和 Angular 中的常用指令&#…

虛擬地址空間(下)進程地址空間(上)

一.關于頁表組成 1.權限&#xff08;rwx) 作用&#xff1a;如1.讓代碼區變成只讀的 2.寫時拷貝的實現&#xff1a;子進程創建時其頁表指向的父進程代碼和數據權限都是只讀的&#xff0c;子進程試圖修改&#xff0c;觸發錯誤&#xff0c;系統開始寫時拷貝。 來源&#xff1a;…

【區塊鏈 + 航運物流】豐溯 - 區塊鏈溯源平臺 | FISCO BCOS 應用案例

豐溯是順豐科技推出的區塊鏈溯源平臺&#xff0c; 采用 FISCO BCOS 底層開源框架&#xff0c; 為農副食品、 冷鏈生鮮等企業客戶及消費 者提供關鍵流通節點的溯源信息服務&#xff0c;形成從源頭到消費者端全鏈路透明的信息鏈。 在商貿消費領域&#xff0c; 溯源一直是保障產品…

iwebsec-SQL數字型注入

1.判斷是否存在漏洞 添加and 11發現正常顯示&#xff0c;添加and 12無回顯條目&#xff0c;則存在sql注入漏洞 2.因為有回顯&#xff0c;嘗試union聯合注入&#xff0c;使用order by判斷出有3個字段 3.使用union聯合注入查看回顯位&#xff0c;發現3三個字段均有回顯&#xff…