Java Lambda 表達式常見面試問題與解答

来源:https://www.cnblogs.com/waldron/archive/2023/11/15/17833524.html
-Advertisement-
Play Games

公眾號「架構成長指南」,專註於生產實踐、雲原生、分散式系統、大數據技術分享。 在本文中,我們將討論一些重要且常見的 Java Lambda 表達式面試問題和解答 1.什麼是 Lambda 表達式? lambda表達式只是一個沒有任何名稱的函數,它甚至可以用作函數中的參數,Lambda 表達式有利於函 ...


公眾號「架構成長指南」,專註於生產實踐、雲原生、分散式系統、大數據技術分享。
在本文中,我們將討論一些重要且常見的 Java Lambda 表達式面試問題和解答

1.什麼是 Lambda 表達式?

lambda表達式只是一個沒有任何名稱的函數,它甚至可以用作函數中的參數,Lambda 表達式有利於函數式編程並大大簡化了開發。

Lambda表達式的主要用途是提供函數式介面的實現。

Lambda 表達式的語法

lambda 表達式的語法由以下三個部分組成:

參數: lambda 表達式可以有零個或多個參數,並用括弧括起來。

箭頭標記:箭頭標記 -> 將參數與 lambda 主體分開。

主體: lambda 的主體包含描述方法功能的表達式或語句。

(parameters) -> expression

或者

(parameters) -> { statements; }

示例

聲明一個簡單的函數式介面:

@FunctionalInterface
interface IFunction {
    int apply(int x, int y);
}

實現該介面的 lambda 表達式:

IFunction add = (x, y) -> x + y;
int result = add.apply(5, 5); // result is 10

在Java 8 Lambda 表達式中,有詳細介紹

2. 為什麼使用Lambda表達式?

Java 中的 Lambda 表達式是一項強大的功能,具有以下幾個主要優勢:

簡潔: Lambda 表達式允許我們更簡潔地編寫匿名類的實例。這使得代碼更易於閱讀和維護。

函數式編程: Lambda 表達式支持 Java 中的函數式編程概念。我們可以將函數作為方法參數傳遞,將它們作為值返回,並更自然地執行集合上的映射和過濾等操作。

可讀性:通過減少樣板代碼,lambda 表達式可以使程式的主要邏輯更加明顯。簡潔的語法可以清楚地表達正在執行的計算或操作。

並行執行支持: Lambda 與支持並行執行的 Stream API 配合良好。這使得編寫並行代碼變得更加容易,利用多核處理器而無需處理低級線程細節。

強類型: Lambda 表達式是強類型的。編譯器會推斷參數、返回值和異常的類型,這可以生成更健壯的代碼。

互操作性: Lambda 可以用在任何需要函數式介面的地方,為使用函數式介面的現有代碼、庫和框架提供良好的互操作性。

3. 以下哪些是有效的 lambda 表達式?

A:

String a, String b -> System.out.print(a+ b);

B:

() -> return;

C:

(int i) -> i;

D:

(int i) -> i++; return i;

正確答案是 C。

選項C有效。 如果主體只有一條語句,則不需要使用 return關鍵字。

4. 編寫 Java Lambda 表達式來創建線程

在 Java 中使用lambda表達式創建線程既簡單又簡潔,我們可以將希望線程執行的任務定義為 lambda,並將其傳遞給 Thread 構造函數。

示例

Runnable task = () -> {
    for (int i = 0; i < 5; i++) {
        System.out.println("Running  thread: " + i);
    }
};

Thread myThread = new Thread(task);
myThread.start();

或者通過將 lambda 表達式直接傳遞給 Thread 構造函數來進一步簡化:

Thread myThread = new Thread(() -> {
    for (int i = 0; i < 5; i++) {
        System.out.println("Running thread: " + i);
    }
});
myThread.start();

5. Lambda 表達式和函數式介面有何關係?

Lambda表達式的主要用途是提供函數式介面的實現。

lambda 表達式提供了一種緊湊且富有表現力的方式來創建函數介面的實例,並使用 lambda 主體實現介面的單個抽象方法,這促進了更加函數式的編程風格,從而使代碼更加簡潔和可讀

示例:

interface IPrint {
    void print(String msg);
}

public class LambdaExample2 {

    public static void main(String[] args) {
         // 傳統方式
         IPrint oldPrint = new IPrint() {
            @Override
            public void print(String msg) {
               System.out.println(msg);
            }
         };
         oldPrint.print("傳統方式輸出");
  
         // 使用 lambda 表達式方式
         IPrint withLambda = (msg) -> System.out.println(msg);
         withLambda.print("lambda 表達式方式輸出");
     }
}


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 定義 最短路樹:以圖上一個點為根節點,刪去部分邊後所形成的樹,樹的邊權滿足任意一點與根結點的路徑長度等於圖上兩點的最短路徑長度。 求法 可以採用 dij 求解。 每次更新 \(dis_v\) 時,記錄每個點最後一次用來更新的邊,即為最短路樹。 核心代碼如下,時間複雜度為 dij 的時間複雜度即 \( ...
  • 來源:juejin.cn/post/7023317351563001886 1、概述 SpringBoot框架不用多介紹,Java程式員想必都知道。相對來說熟悉Quarkus的人可能會少一些。Quarkus首頁放出的標語:超音速亞原子的Java(Supersonic Subatomic Java)。 ...
  • 概述 Java 中的引用類似 C 語言中的指針,指向一個對象,比如: // person 就是指向 Person 實例“張三”的引用 Person person = new Person("張三"); 在 JDK1.2 以前,Java 里的引用是很傳統的定義:如果 reference 類型的數據中存 ...
  • 1 前言 如果你正在準備軟體工程師或軟體開發人員的面試,那麼你可能知道由於其開放性質和廣泛性,準備系統設計是多麼困難,但同時你也不能忽略它。在軟體工程界,如果你正在申請高級工程師/主管/架構師或更高級別的角色,系統設計是最受追捧的技能,也是整個過程中最重要的環節之一。如果你搞砸了這個,其他的都不重要 ...
  • 關於Node.js的開發者來說,在開發機器上管理多個不同版本的Node.js是一個常見痛點。之前在開發者安全大全專欄中,提到過解決方法:使用nvm,如果對於nvm還不瞭解的話,可以前往瞭解。 對於TJ來說,因為習慣敲命令了,所以nvm其實已經夠用了。但是,有的小伙伴還是更喜歡可視化的管理工具。所以, ...
  • 我希望在職業生涯早期就開始做的事情和我希望以不同的方式做的事情。 大家好,我已經做了八年半的軟體工程師。這篇文章來源於我最近對自己在職業生涯中希望早點開始做的事情以及希望以不同方式做的事情的自我反思。 我在這裡分享的對任何希望提高和進步到高級甚至更高職位的初級至中級開發者都很有用。 0 大綱 我的職 ...
  • 資料庫事務是什麼?事務的四大特性是什麼? 1.資料庫事務 事務是一組原子性的 SQL 語句,或者說一個獨立的工作單元。如果資料庫引擎能夠成功地對資料庫應用該組操作的全部語句,那麼就執行該組查詢。如果其中任何一條語句因為崩潰或其他原因無法執行,那麼所有的語句都不會執行。也就是說,事務內的語句,要麼全部 ...
  • 學習視頻:【孫哥說Spring5:從設計模式到基本應用到應用級底層分析,一次深入淺出的Spring全探索。學不會Spring?只因你未遇見孫哥】 第四章、註入(Injection) 1.什麼是註入 通過Spring工廠及配置文件,為所創建對象的成員變數賦值 1.1為什麼需要註入 “通過編碼的方式,為 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...