Java8新特性——Lambda表達式

来源:https://www.cnblogs.com/LucasBlog/archive/2019/12/11/12026053.html
-Advertisement-
Play Games

一. 基本介紹 1. Lambda Lambda是java 8引入的一個新特性,一個Lambda表達式是一個匿名函數,它提供了更為簡單的語法和協作方式,能夠讓我們通過表達式來代替函數式介面。 Lambda表達式完全可以用在簡化創建匿名內部類上。 2. 函數式介面 所謂的函數式介面,就是指 只有一個抽 ...


一. 基本介紹

  1. Lambda

    Lambda是java 8引入的一個新特性,一個Lambda表達式是一個匿名函數,它提供了更為簡單的語法和協作方式,能夠讓我們通過表達式來代替函數式介面。

    Lambda表達式完全可以用在簡化創建匿名內部類上。

  2. 函數式介面

    所謂的函數式介面,就是指只有一個抽象方法的介面

二.Lambda格式

Lambda格式由3個部分組成:一些參數一個箭頭一段代碼

  1. 標準格式為:

    (參數類型 參數名稱) -> { 代碼語句 }

    說明:

    • 小括弧里的語法與傳統方法的參數列表一致,如果沒有參數,就留空;如果有多個參數,用逗號分隔。
    • ->是新引入的語法格式,代表指向動作
    • 大括弧內的語法與傳統方法體要求基本一致。
  2. 省略樣式

    在Lambda標準格式的基礎上,省略樣式寫法的規則為:

    • 小括弧內參數類型可以省略
    • 如果小括弧內有且僅有一個參數,則小括弧可以省略
    • 如果大括弧內有且僅有一個語句,則無論是否有返回值,都可以省略大括弧、return關鍵字及語句分號

三.Lambda的使用前提

  1. 使用Lambda必須具有介面,並且要求介面有且僅有一個抽象方法。(函數式介面)
  2. 使用Lambda必須具有上下文推斷。也就是調用方法的參數或局部變數類型必須為Lambda對應的介面類型,才能使用Lambda作為該介面的實例。

四.實例

  1. 基本的Lambda例子

    假設有一個List,使用for迴圈遍歷

    import java.util.*;
    
    public class LambdaDemo {
        public static void main(String[] args) {
            String[] fruits = {"apple", "banana", "peach", "watermelon", "strawberry", "pear"};
            List<String> fruitsList = Arrays.asList(fruits);
    
            // java8 之前的迴圈
            for (String f : fruitsList) {
                System.out.println(f + " ");
            }
         System.out.println("--------------------");
            // 使用lambda表達式操作迴圈
            fruitsList.forEach(f -> System.out.println(f + " "));
        }
    }
  2. 實現Runnable介面時

    public class LambdaDemo {
        public static void main(String[] args) {
            // 創建線程實例
            Thread t = new Thread(new Runnable(){
    
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName());
                }
            });
    
            // 使用lambda表達式 創建Runnable介面
            new Thread(() -> System.out.println(Thread.currentThread().getName())).start();
    
            t.start();
    
            System.out.println(Thread.currentThread().getName());
        }
    }
  3. Lambda對集合進行排序

    import java.util.*;
    
    public class LambdaDemo {
        public static void main(String[] args) {
            String[] fruits = {"apple", "peach", "watermelon", "banana", "strawberry", "pear"};
    
            // 使用匿名內部類排序
            // Arrays.sort(fruits, new Comparator<String>() {
            //     @Override
            //     public int compare(String s1, String s2) {
            //         return s1.compareTo(s2);
            //     }
            // });
    
            // 使用lambda表達式排序
            Arrays.sort(fruits, (s1, s2) -> s1.compareTo(s2));
    
            System.out.println(Arrays.toString(fruits));
        }
    }

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

-Advertisement-
Play Games
更多相關文章
  • model詳解 Django中遵循 Code Frist 的原則,即:根據代碼中定義的類來自動生成資料庫表。 創建表 基本結構 from django.db import models # Create your models here. class userinfo(models.Model): ...
  • 第一步: 刪除該app名字下的migrations文件。 第二步: 進入資料庫,找到django_migrations的表,刪除該app名字的所有記錄。 delete from django_migrations; 第三步: python manage.py makemigrations pytho ...
  • 前兩天剛和媳婦兒從福岡旅游回來,這次久違的再去日本,感受良多啊! 首先是心情,之前是拿了老爸和自己所有的積蓄去上學,有一種為了人生未來而背水一戰的包袱在身上 結果遇到金融危機,沒有錢提前付下一年的學費也沒有時間找工作,最後不得不回國,失敗了! 這次和媳婦去玩,一切行程都是媳婦安排,從機票到大巴票到三 ...
  • Inversion of Control 將創建對象的權利交給框架,包括DI(Dependency Injection,依賴註入)和DL(Dependency Lookup,依賴查找),能削減電腦程式的耦合,即解除代碼中的依賴關係 應用 xml 1. 建立maven工程 2. 導入jar包,pom ...
  • python中的 和 ,能夠讓函數支持任意數量的參數,它們在函數定義和調用中,有著不同的目的 一. 打包參數 的作用:在函數定義中,收集所有的位置參數到一個新的元組,並將這個元組賦值給變數args 的作用:在函數定義中,收集關鍵字參數傳遞給一個字典,並將這個字典賦值給變數kwargs PS:遇到問題 ...
  • 1、find檢測str是否包含在mystr,如果是返回開始的索引值,否則返回 1 2、index和find一樣只不過,str不在mystr中會報一個異常 3、rfind、rindex從右往左找 4、count返回str在start和end之間,在mystr里出現的次數 5、replace把mystr ...
  • Python是面向對象(OOP)的語言, 而且在OOP這條路上比Java走得更徹底, 因為在Python里, 一切皆對象, 包括int, float等基本數據類型. 在Java里, 若要為一個類定義只讀的屬性, 只需要將目標屬性用private修飾, 然後只提供getter()而不提供setter( ...
  • 原創發佈在 https://blog.csdn.net/qq_21484935/article/details/103461778 思路:請求小說的url並對內容進行解析,找到帶有更新時間的span標簽。然後配置郵箱,將內容作為發送。 我選擇的是網易的126郵箱,在官網登錄賬號,設置中,打開“POP ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...