【java】lambda表達式總結

? ? ??

目錄

一、面向對象的處理方法

二、函數式編程的處理方法

先使用匿名內部類:

lambda改造:

lambda改造規則

示例:

三、補充:函數式接口


????????大家好,我是jstart千語。今天總結一下lambda表達式。lambda表達式在后面的streamAPI和mybatis-plus都用得非常多。是很有必要學習的。

? ? ? ? 說白了,lambda表達式就是簡化函數式接口匿名內部類的書寫。

? ? ? ? 什么是函數式接口?就是只有一個抽象方法的接口

? ? ? ? 什么是匿名內部類?就是在實參中書寫內部類,傳遞給方法的形參。

?lambda表達式是函數式編程的產物,與我們面向對象編程不同。所以他們的實現方式也會不同。我會從面向對象的方式講起。

Lambda 是一個匿名函數,我們可以把 Lambda 表達式理解為是一段可以傳遞的代碼,它可以寫出更簡潔、更靈活的代碼,作為為一種更緊湊的代碼風格,使 Java 語言表達能力得到了提升。
?


一、面向對象的處理方法

對于使用不同的工具來發送消息的功能,如果是使用面向對象的思想,需要先定義一個接口,然后讓不同的工具來實現這個接口,并重寫它的抽象方法,例如:

接口:

public interface sendMessage {void send();
}

?Email實現類:

public class Email implements sendMessage {@Overridepublic void send() {System.out.println("use email send message");}
}

phone實現類:

public class phone implements sendMessage {@Overridepublic void send() {System.out.println("use phone send message");}
}

具體運行的代碼:

public class Main {public static void main(String[] args) {sendMessage email = new Email();//創建email的實例email.send(); //調用實現類的方法}}

輸出:


總結:

? ? ? ? 顯然,如果使用面向對象的思想,要先自己寫實現類,然后重寫方法,然后創建對象,最好再調用方法。相對來說比較麻煩,特別是某種情況只用一次的時候。



二、函數式編程的處理方法

這是一種簡化代碼的一種書寫風格,可以直接將接口的具體實現寫在lambda表達式里,不需要再進行實例化接口、創建對象、調用方法。

比如基于上述的例子,我再補充一個使用WX來發送消息的實現:

先使用匿名內部類:

public static void main(String[] args) {message(new SendMessage() {@Overridepublic void send() {System.out.println("use wx send message");}});}public static void message(SendMessage sendMessage) {sendMessage.send();}

lambda改造:

public static void main(String[] args) {message(() -> {System.out.println("use wx send message");});}public static void message(SendMessage sendMessage) {sendMessage.send();}

lambda改造規則

改造規則遵循:可推導可省略的思想。也就是說如果可以由java推導出來的就可以省略。

具體如下:

  • 從接口名到方法名都可以省略,也就是從new...到方法名都可以省略,參數和方法體之間用 -> 連接。
  • 參數類型可以省略不寫
  • 如果只有一個參數,()可以省略;如果參數不止一個,那么()就不能省略,只能省略參數類型
  • 如果方法體只有一行,{}可以省略、return可以省略,方法體內的 ;可以省略

示例:

    public static void main(String[] args) {String result = message("李雷","hello",new SendMessage(){@Overridepublic String send(String user, String message) {System.out.println("send " + message + " to " + user);return "success";}});System.out.println("result: " + result);}public static String message(String user,String message,SendMessage sendMessage) {return sendMessage.send(user, message);}

lambda表達式:

    public static void main(String[] args) {String result = message("李雷","hello",(user, message) -> {System.out.println("send " + message + " to " + user);return "success";});System.out.println("result: " + result);}public static String message(String user,String message,SendMessage sendMessage) {return sendMessage.send(user, message);}

輸出:



三、補充:函數式接口

函數式接口就是指只有一個抽象方法的接口,可以使用@FunctionalInterface來標記。

  1. 不加這個注解,只要接口里面只有一個方法,那這個接口也是函數式接口
  2. 加了這個注解,如果接口里面不止一個抽象方法,會報編譯錯誤。
  3. 實際使用中,還是添加這個注解,因為這樣可以做到顯式地聲明,更清楚地知道這個接口的使用意圖。

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

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

相關文章

AtCoder Beginner Contest 242 G - Range Pairing Query (莫隊)

每周五篇博客:(5/5) 我做到了! https://atcoder.jp/contests/abc242/tasks/abc242_g 這題主要是想給大家提供一份莫隊的板子,很多莫隊題基本上填空就差不多了( 板子 void solve() {int n;std::cin >…

淘寶商品主圖標題api接口

1、輸入淘寶商品id或者鏈接,點查詢 2、查詢淘寶商品主圖,商品標題,商品價格,賣家旺旺 3、支持api接口

文心一言開發指南06——千帆大模型平臺新手指南

版權聲明 本文原創作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 千帆大模型平臺為新手用戶提供了一個全面的入門指南,以便用戶能夠快速熟悉平臺的操作和功能。千帆大模型平臺通過提供詳細的新手指南,確保用戶能夠順…

Pacman-N-queen

文檔 代碼及文檔:通過網盤分享的文件:code 鏈接: https://pan.baidu.com/s/1Rgo9ynnEqjZsSP2-6TyS8Q?pwdn99p 提取碼: n99p 補充核心代碼 核心代碼內容: genetic_algorithm,py # -*- coding: utf-8 -*- """ Created on …

常用的多傳感器數據融合方法

1. 概述 根據具體需求(實時性、計算資源、噪聲特性)選擇合適的方法,實際應用中常結合多種方法(如UKF與神經網絡結合)。 傳統方法 (KF/EKF/UKF/PF)依賴數學模型,適合動態系統&#…

簡單幾步,開啟 Intel VT-x 讓電腦“解開CPU封印”

#vmware #虛擬機 #cpu虛擬化 # Intel VT-x 前言 你是不是也遇到過這種情況:在嘗試運行虛擬機(VM)、安卓模擬器,或者使用 Windows 沙盒、WSL2 等功能時,遇到了類似“此主機支持 Intel VT-x,但 Intel VT-x …

Go語言--語法基礎4--基本數據類型--字符串類型

在 Go 語言中,字符串也是一種基本類型。相比之下, C/C 語言中并不存在原 生的字符串類型, 通常使用字符數組來表示,并以字符指針來傳遞。 Go 語言中字符串的聲明和初始化非常簡單,舉例如下: var str st…

QT中的事件及其屬性

Qt中的事件是對操作系統提供的事件機制進行封裝,Qt中的信號槽就是對事件機制的進一步封裝 但是特殊情況下,如對于沒有提供信號的用戶操作,就需要通過重寫事件處理的形式,來手動處理事件的響應邏輯 常見的Qt事件: 常見事…

socket套接字-UDP(中)

socket套接字-UDP(上)https://blog.csdn.net/Small_entreprene/article/details/147465441?fromshareblogdetail&sharetypeblogdetail&sharerId147465441&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link UDP服務器…

C++入門小館: STL 之queue和stack

嘿,各位技術潮人!好久不見甚是想念。生活就像一場奇妙冒險,而編程就是那把超酷的萬能鑰匙。此刻,陽光灑在鍵盤上,靈感在指尖跳躍,讓我們拋開一切束縛,給平淡日子加點料,注入滿滿的pa…

ALTER TABLE 刪除DROP表列的報錯: 因為有一個或多個對象訪問此列

目錄 1.問題 2.解決辦法 1.問題 刪除某個列名的時候,提示錯誤因為有一個或多個對象訪問此列 2.解決辦法 2.1 添加或刪除表新列名 將表中的字段設置Default 或 NOT NULL 都會給該字段添加約束,增加了這些約束后,再SQL腳本修改類型、刪除會發生…

python源碼打包為可執行的exe文件

文章目錄 簡單的方式(PyInstaller)特點步驟安裝 PyInstaller打包腳本得到.exe文件 簡單的方式(PyInstaller) 特點 支持 Python 3.6打包為單文件(–onefile)或文件夾形式自動處理依賴項 步驟 安裝 PyIns…

【2025最近Java面試八股】Spring中循環依賴的問題?怎么解決的?

1. 什么是循環依賴? 在Spring框架中,循環依賴是指兩個或多個bean之間相互依賴,形成了一個循環引用的情況。如果不加以處理,這種情況會導致應用程序啟動失敗。導致 Spring 容器無法完成依賴注入。 例如: Service publi…

JimuBI 積木報表 v1.9.5發布,大屏和儀表盤,免費數據可視化

項目介紹 JimuBI (積木報表BI) 是一款免費的數據可視化產品,含大屏和儀表盤、門戶、移動圖表,像搭建積木一樣完全在線設計! 大屏采用類word風格,可以隨意拖動組件,想怎么設計怎么設計,可以像百度和阿里一樣…

云原生課程-Docker

一次鏡像,到處運行。 1. Docker詳解: 1.1 Docker簡介: Docker是一個開源的容器化平臺,可以幫助開發者將應用程序和其依賴的環境打包成一個可移植的,可部署的容器。 docker daemon:是一個運行在宿主機(DO…

HikariCP 6.3.0 完整配置與 Keepalive 優化指南

HikariCP 6.3.0 完整配置與 Keepalive 優化指南 HikariCP 是一個高性能、輕量級的 JDBC 連接池框架,廣泛應用于 Java 應用,尤其是 Spring Boot 項目。本文檔基于 HikariCP 6.3.0 版本,詳細介紹其功能、配置參數、Keepalive 機制以及優化建議…

基于springboot+vue的攝影師分享交流社區的設計與實現

開發語言:Java框架:springbootJDK版本:JDK1.8服務器:tomcat7數據庫:mysql 5.7(一定要5.7版本)數據庫工具:Navicat11開發軟件:eclipse/myeclipse/ideaMaven包:…

ComfyUI for Windwos與 Stable Diffusion WebUI 模型共享修復

#工作記錄 雖然在安裝ComfyUI for Windwos時已經配置過extra_model_paths.yaml 文件,但升級ComfyUI for Windwos到最新版本后發現原先的模型配置失效了,排查后發現,原來是 extra_model_paths.yaml 文件在新版本中被移動到了C盤目錄下&#x…

【最新版】沃德代駕源碼全開源+前端uniapp

一.系統介紹 基于ThinkPHPUniapp開發的代駕軟件。系統源碼全開源,代駕軟件的主要功能包括預約代駕、在線搶單、一鍵定位、在線支付、車主登記和代駕司機實名登記等?。用戶可以通過小程序預約代駕服務,系統會估算代駕價格并推送附近代駕司機供用戶選擇&…

react的 Fiber 節點的鏈表存儲

在React Fiber架構中,Fiber節點的鏈表存儲是一種重要的數據結構組織方式,用于管理和遍歷Fiber節點。以下是關于Fiber節點鏈表存儲的詳細介紹: 鏈表結構 單鏈表:React Fiber節點通過next指針形成單鏈表結構。每個Fiber節點都有一…