Lambda表達式和Collection集合

来源:https://www.cnblogs.com/yaomagician/archive/2023/02/28/17165949.html
-Advertisement-
Play Games

Lambda表達式 Lambda表達式理解 Lambda表達式是Jdk 8 開始新增的一種語法形式;作用:用於簡化匿名內部類的代碼寫法 註意:Lambda表達式只能簡化函數式介面的匿名內部類!!! 什麼是函數式介面? 有且僅有一個抽象方法的介面。 註意:大部分函數式介面,上面可能會有一個@Funct ...



Lambda表達式

Lambda表達式理解

  • Lambda表達式是Jdk 8 開始新增的一種語法形式;作用:用於簡化匿名內部類的代碼寫法

     

     

     

註意:Lambda表達式只能簡化函數式介面的匿名內部類!!!

什麼是函數式介面?

  • 有且僅有一個抽象方法的介面。

  • 註意:大部分函數式介面,上面可能會有一個@FunctionalInterface的註解,有該註解的介面就必定是函數式介面。

Lambda表達式的省略寫法(進一步簡化Lambda表達式的寫法)

  • 參數類型可以省略不寫。

  • l如果只有一個參數,參數類型可以省略,同時()也可以省略。

  • l如果Lambda表達式中的方法體代碼只有一行代碼,可以省略大括弧不寫,同時要省略分號!此時,如果這行代碼是return語句,也必須去掉return關鍵字不寫。

上代碼

基於無參無返回值,無參有返回值,有參無返回值,有參有返回值

package com.itheima.yaoyao;
​
import java.util.Random;
​
public class LambdaDemo2 {
    public static void main(String[] args) {
        //基於匿名內部類調用useInterOne:分析有一個InterOne介面【快速創建介面的實現類對象】 怎麼做!
        useInterOne(new InterOne() {
            @Override
            public void methodOne() {
                System.out.println("無參無返匿名內部類調用");
            }
        });
​
​
        //基於Lambda表達式調用useInterOne:分析(1)必須要傳遞InterOne介面實現類對象【省略】(2)必須要實現methodOne抽象方法【省略】
        //methodOne方法的邏輯【不能!】傳遞methodOne方法的邏輯(剩餘的事情由Java來做) 【基於Lambda表達式來做methodOne方法的邏輯載體】
       useInterOne(()->{System.out.println("lambda表達式表示無參無返");});
​
​
        //基於匿名內部類調用useInterTwo
        useInterTwo(new InterTwo() {
            @Override
            public Integer methodTwo() {
                return 100;
            }
        });
​
​
        //基於Lambda表達式調用useInterTwo:分析(1)必須要傳遞InterTwo介面實現類對象【省略】(2)必須要實現methodTwo抽象方法【省略】
        //methodTwo方法的邏輯【不能!】傳遞methodTwo方法的邏輯(剩餘的事情由Java來做) 【基於Lambda表達式來做methodTwo方法的邏輯載體】
        //如果Lambda實現的方法需要返回值就要在{}中return回滿足要求的結果
​
        useInterTwo(()->{
            return new Random().nextInt(100);
        });
​
        //基於匿名內部類調用useInterThree
        useInterThree(new InterThree() {
            @Override
            public void methodThree(String name, String food) {
                System.out.println(name+"愛喝"+food);
            }
        });
​
​
        //基於Lambda表達式調用useInterThree:分析(1)必須要傳遞InterThree介面實現類對象【省略】(2)必須要實現methodThree抽象方法【省略】
        //methodThree方法的邏輯【不能!】傳遞methodThree方法的邏輯(剩餘的事情由Java來做) 【基於Lambda表達式來做methodThree方法的邏輯載體】
        //如果Lambda表達式作為方法的載體,方法聲明瞭形式參數,在Lambda的()中也要聲明同樣形式參數
        useInterThree( (String name,String food) ->{
            System.out.println(name + "愛吃"+"小雞燉蘑菇");
        });
​
​
        //基於匿名內部類調用useInterFour
        useInterFour(new InterFour() {
            @Override
            public String methodFour(String foodOne, String foodTwo) {
                return foodOne+"燉"+foodTwo;
            }
        });
​
​
        //基於Lambda調用
         useInterFour((String foodOne, String foodTwo) ->{return foodOne + "炒"+ foodTwo ;});
​
    }
​
    //編寫4個方法分別將四個介面作為方法的參數【傳遞四個介面中不同類型的方法Lambda表達式】
    //在編寫方法的時候並不明確方法的具體邏輯是什麼 【多態:傳遞進來的實現類的實現邏輯是什麼,這裡就執行什麼邏輯】
    public static void useInterOne(InterOne interOne) {
        interOne.methodOne();
    }
​
    public static void useInterTwo(InterTwo interTwo) {
        Integer result = interTwo.methodTwo();
        System.out.println("useInterTwo Result:" + result);
    }
​
    public static void useInterThree(InterThree interThree) {
        interThree.methodThree("張二狗", "西紅柿炒洋柿子");
    }
​
    public static void useInterFour(InterFour interFour) {
        String result = interFour.methodFour("大蔥", "笨雞蛋");
        System.out.println("useInterFour Result:" + result);
    }
}
​
@FunctionalInterface
interface InterOne {
    //無參無返回值的抽象方法
    void methodOne();
}
​
@FunctionalInterface
interface InterTwo {
    //無參有返回值的抽象方法
    Integer methodTwo();
}
​
@FunctionalInterface
interface InterThree {
    //有參無返回值的抽象方法
    void methodThree(String name, String food);
}
​
@FunctionalInterface
interface InterFour {
    //有參有返回值的抽象方法
    String methodFour(String foodOne, String foodTwo);
}
​

 


面試題:你開發的時候使用過Lambda嗎? 【使用過!】

  
  面試題:有人說Lambda就是匿名內部類的代替的方式,你是否認同? 【不認同】
    答案:(1)Lambda只能作用於介面,匿名內部類可以作用於抽象類【子類對象】/介面【實現類對象】/具體類【子類對象】
    (2)Lambda只能作用於函數式介面【只能有一個抽象方法】,匿名內部類作用於介面【介面中可以有任意個數的抽象方法】
    (3)匿名內部類本質上是通過語法底層生成一個.class文件,Lambda表達式不會額外生成.class文件【會在代碼執行的時候動態編譯】
    (4)思想層面的不同,匿名內部類體現還是面向對象【對象】,Lambda表達式體現的是函數式思想【作為方法邏輯的載體而出現】
    
    

 

Collection集合

 

Collection是單列集合的祖宗,它規定的方法(功能)是全部單列集合都會繼承的。

 

 

 

Collection的常見方法如下:

 

 

 

迭代器概述

迭代器是用來遍歷集合的專用方式(數組沒有迭代器),在Java中迭代器的代表是Iterator

Collection集合獲取迭代器的方法:

 

 

 

Iterator迭代器中的常用方法

 

 

 

 

 

 

★註意事項:一次hasNext方法搭配一次next方法(否則容易越界) 迭代器是一次性的

★註意事項:不推薦在迭代過程中使用集合修改集合長度,如果要刪除元素可以通過迭代器。

遍歷Collection集合的三種方法

迭代器

 Collection<String> names = List.of("施恩", "徐寧", "鬱保四", "李應", "周通", "公孫勝", "白勝", "湯隆", "張清", "皇甫端");
// 使用迭代器Iterator遍歷集合中的元素
Iterator<String> iterator = names.iterator();
while (iterator.hasNext()){
    String next = iterator.next();
    System.out.println(next);
}

 

增強for迴圈

Collection<String> names = List.of("施恩", "徐寧", "鬱保四", "李應", "周通", "公孫勝", "白勝", "湯隆", "張清", "皇甫端");
// 使用增強for迴圈遍歷names集合
for (String name: names) {
    System.out.println(name);
}

 

lambda表達式

Collection<String> names = List.of("施恩", "徐寧", "鬱保四", "李應", "周通", "公孫勝", "白勝", "湯隆", "張清", "皇甫端");
​
// 使用Lambda表達式迴圈遍歷names集合
names.forEach(element->{
    System.out.println(element);
});
​
names.forEach(new Consumer<String>() {
    @Override
    public void accept(String s) {
        System.out.println(s);
    }
});

 


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

-Advertisement-
Play Games
更多相關文章
  • Spring Boot 支持 Java Util Logging,Log4J,Log4J2 和 Logback 等日誌框架,預設採用 Logback 日誌。 在實際 Spring Boot 項目中使用 Spring Boot 預設日誌配置是不能夠滿足實際生產及開發需求的,需要選定適合的日誌輸出框架, ...
  • Nacos Nacos體系架構 領域模型 Nacos 領域模型描述了服務與實例之間的邊界和層級關係。Nacos 的服務領域模型是以“服 務”為維度構建起來的,這個服務並不是指集群中的單個伺服器,而是指微服務的服務名。 “服務”是 Nacos 中位於最上層的概念,在服務之下,還有集群和實例的概念。 服 ...
  • MyBatis的關聯映射 Mybatis的關聯映射 實際的開發中,對資料庫的操作常常會涉及到多張表,這在面向對象中就涉及到了對象與對象之間的關聯關係。針對多表之間的操作,MyBatis提供了關聯映射,通過關聯映射就可以很好的處理對象與對象之間的關聯關係。 1.關聯關係概述 在關係型資料庫中,多表之間 ...
  • Spring 源碼環境搭建 Spring 是面向 Bean 的編程,Bean 在其中起到了巨大的作用,而 Spring 提供了 IOC 容器來管理對象之間的依賴關係,使我們可以更加關註業務,輕鬆的構建一個企業應用。藉助 IOC 特性和 AOP 面向切麵編程,可以說 Spring 為開發者提供了無限的 ...
  • 我是3y,一年CRUD經驗用十年的markdown程式員👨🏻‍💻常年被譽為職業八股文選手 在前陣子我就已經接入了釘釘的群機器人和工作消息推送,一直沒寫文章同步到給大家。 像這種接入渠道的工作,雖然我沒接入過,但可預見性地就是看看官方文檔,然後對著文檔一頓學習,複製下接入的代碼,然後調試,最後就 ...
  • VL33 非整數倍數據位寬轉換8to12 和上一題一樣的,註意valid_out輸出時加一個valid_in(其實32題也要加,不過不加模擬也能過)。 `timescale 1ns/1ns module width_8to12( input clk , input rst_n , input val ...
  • 歡迎關註個人公眾號:愛喝可可牛奶 LeetCode演算法訓練-回溯總結 適用問題 組合問題:N個數裡面按一定規則找出k個數的集合 排列問題:N個數按一定規則全排列,有幾種排列方式 切割問題:一個字元串按一定規則有幾種切割方式 子集問題:一個N個數的集合里有多少符合條件的子集 棋盤問題:N皇後,解數獨等 ...
  • if條件語句 if語句 if條件語法結構: if 條件語句: 滿足條件運行的代碼1 滿足條件運行的代碼2 ... ps:條件語句(可以是單個數據,即本身就是布爾類型)需返回一個布爾類型,判斷是否進入條件分支語句 if True: print('條件成⽴執⾏的代碼1') print('條件成⽴執⾏的代 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...