第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Lambda 表達(dá)式簡介

大家好,今天我們開始一個(gè)新專題 —— Java Lambda 表達(dá)式。這是在 Java 8 中出現(xiàn)的一個(gè)新特性,但它并不是 Java 獨(dú)有的,JavaScript、C#、C++ 等在 Java 8 之前就支持 Lambda 表達(dá)式的特性,現(xiàn)在的大多數(shù)程序語言也都支持 Lambda 表達(dá)式。
這個(gè)專題中我們學(xué)習(xí)函數(shù)式編程的概念、Lambda 表達(dá)式的語法、以及如何在我們的代碼中使用 Lambda 表達(dá)式。本文我們主要先介紹下 Lambda 表達(dá)式是什么?

1. 什么是 Lambda 表達(dá)式

什么是 Lambda 表達(dá)式呢?維基百科是這樣定義的:

Lambda expression in computer programming, also called an anonymous function, is a defined function not bound to an identifier. ——維基百科

翻譯過來就是 Lambda 表達(dá)式也叫作匿名函數(shù),是一種是未綁定標(biāo)識符的函數(shù)定義,在編程語言中,匿名函數(shù)通常被稱為 Lambda 抽象。

換句話說, Lambda 表達(dá)式通常是在需要一個(gè)函數(shù),但是又不想費(fèi)神去命名一個(gè)函數(shù)的場合下使用。這種匿名函數(shù),在 JDK 8 之前是通過 Java 的匿名內(nèi)部類來實(shí)現(xiàn),從 Java 8 開始則引入了 Lambda 表達(dá)式——一種緊湊的、傳遞行為的方式。

2. 為什么要引入 Lambda 表達(dá)式

Java Lambda 表達(dá)式是伴隨 Java 8 于 2014 年出現(xiàn)的。這個(gè)時(shí)候恰好是多核 CPU 和大數(shù)據(jù)興起的時(shí)候。在這些趨勢下,芯片設(shè)計(jì)者只能采用多核并行的設(shè)計(jì)思路,而軟件開發(fā)者必須能夠更好地利用底層硬件的并發(fā)特性。做過多線程編程的同學(xué)應(yīng)該很清楚,在并發(fā)過程中涉及鎖相關(guān)的編程算法不但容易出錯(cuò),而且耗時(shí)費(fèi)力。雖然 Java 提供了 java.util.concurrent 包以及很多第三方類庫來幫助我們寫出多核 CPU 上運(yùn)行良好的程序,但在大數(shù)據(jù)集合的處理上面這些工具包在高效的并行操作上都有些欠缺,我們很難通過簡單的修改就能夠在多核 CPU 上進(jìn)行高效的運(yùn)行。

為了解決上述的問題,需要在程序語言上修改現(xiàn)有的 Java ——增加 Lambda 表達(dá)式,同時(shí)在 Java 8 也引入Stream(java.util.stream) 流——一個(gè)來自數(shù)據(jù)源的元素隊(duì)列,支持聚合操作,來提供對大數(shù)據(jù)集合的處理能力。

所以 Lambda 表達(dá)式的出現(xiàn)時(shí)為了適應(yīng)多核 CPU 的大趨勢,一方面通過它我們方便的高效的并發(fā)程序,通過簡單地修改就能編寫復(fù)雜的集合處理算法。

3. Lambda 表達(dá)式的優(yōu)點(diǎn)

那么 Lambda 具體有哪些優(yōu)點(diǎn)呢?

  1. 更加緊湊的代碼: Lambda 表達(dá)式可以通過省去冗余代碼來減少我們的代碼量,增加我們代碼的可讀性;
  2. 更好地支持多核處理: Java 8 中通過 Lambda 表達(dá)式可以很方便地并行操作大集合,充分發(fā)揮多核 CPU 的潛能,并行處理函數(shù)如 filter、map 和 reduce;
  3. 改善我們的集合操作: Java 8 引入 Stream API,可以將大數(shù)據(jù)處理常用的 map、reduce、filter 這樣的基本函數(shù)式編程的概念與 Java 集合結(jié)合起來。方便我們進(jìn)行大數(shù)據(jù)處理。

4. 我們的第一個(gè)例子

前面說了 Lambda 表達(dá)式的優(yōu)點(diǎn),我們用一個(gè)例子來直觀的感受下 Lambda 表達(dá)式是如何幫我們減少代碼行數(shù),增加可讀性的。

Swing 是一個(gè)與平臺無關(guān)的 Java 類庫(位于 java.awt.* 中),用來編寫圖形界面( GUI )。里面有一個(gè)常見的用法:為了響應(yīng)用戶操作,需要注冊一個(gè)事件監(jiān)聽器,當(dāng)用戶輸入時(shí),監(jiān)聽器就會執(zhí)行一些操作(這類似于我們網(wǎng)頁的上的一個(gè) Botton 按鈕,當(dāng)用戶點(diǎn)擊按鈕后,js 代碼會執(zhí)行相應(yīng)的動作)。

4.1 使用使用匿名內(nèi)部類來將行為和點(diǎn)擊按鈕進(jìn)行關(guān)聯(lián)

這是我們在 Java 8 以前,通常的寫法:

button.addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent actionEvent) {
        System.out.println("button click");        
    }
});

在上面的例子中,我們創(chuàng)建了一個(gè)對象來實(shí)現(xiàn) ActionListener 接口(這個(gè)對象并沒有命名,它是一個(gè)匿名內(nèi)部類),這個(gè)對象有一個(gè) actionPerformed 方法。當(dāng)用戶點(diǎn)擊按鈕 button 時(shí),就會調(diào)用該方法,輸出 button click。

4.2 使用 Lambda 表達(dá)式來將行為和點(diǎn)擊按鈕進(jìn)行關(guān)聯(lián)

在使用 Lambda 表達(dá)式以后的寫法:

button.addActionListener(event -> System.out.println("button click"));

我們只用了一行代碼就完成了,你是不是一眼就看出來這個(gè)點(diǎn)擊事件做的就是輸出 button click。
關(guān)于 Lambda 表 達(dá)式其他的兩個(gè)特點(diǎn)我們將在后續(xù)的內(nèi)容中進(jìn)行解釋。

5. 前置知識

本教程主要講解的是 Java 8 新特性中的 Lambda 表達(dá)式的語法基礎(chǔ)以及應(yīng)用,所以需要學(xué)習(xí)本教程的讀者至少掌握 Java 基礎(chǔ)語法,Java 集合,迭代器,還需要了解部分設(shè)計(jì)模式以及設(shè)計(jì)原則為后期部分小節(jié)學(xué)習(xí)做鋪墊。

6. 小結(jié)

本節(jié)主要介紹了:
  • 分析了 Java 8 開始支持 Lambda 表達(dá)式的動機(jī)、以及使用 Lambda 表達(dá)式的好處。
  • 介紹了 Lambda 表達(dá)式的優(yōu)點(diǎn),并通過 Swing 的按鈕點(diǎn)擊事件來直觀的感受 Lambda 表達(dá)式是如何來簡化我們的代碼的。