Java Lambda表達式的3種簡寫方式

2021-01-14 逆向開發

使用 Lambda 表達式是為了簡化程序代碼,Lambda 表達式本身也提供了多種簡化形式,這些簡化形式雖然簡化了代碼,但客觀上使得代碼可讀性變差。本節介紹 Lambda 表達式的幾種簡化形式。

省略參數類型

Lambda 表達式可以根據上下文環境推斷出參數類型。calculate 方法中 Lambda 表達式能推斷出參數 a 和 b 是 int 類型,簡化形式如下:

public static Calculable calculate(char opr) {    Calculable result;    if (opr == '+') {                result = (a, b) -> {            return a + b;        };    } else {                result = (a, b) -> {            return a - b;        };    }    return result;}

代碼第 5 行和第 10 行是《Java Lambda表達式》一節示例中result = (int a, int b) -> {代碼的簡化寫法,其中 a 和 b 是參數。

省略參數小括號

如果 Lambda 表達式中的參數只有一個,可以省略參數小括號。修改 Calculable 接口中的 calculateInt 方法,代碼如下。

@FunctionalInterfacepublic interface Calculable {        int calculateInt(int a);}

其中 calculateInt 方法只有一個 int 類型參數,返回值也是 int 類型。調用 calculateInt 方法代碼如下:

public static void main(String[] args) {    int n1 = 10;        Calculable f1 = calculate(2);        Calculable f2 = calculate(3);        System.out.printf("%d二次方 = %d \n", n1, f1.calculateInt(n1));        System.out.printf("%d三次方 = %d \n", n1, f2.calculateInt(n1));}public static Calculable calculate(int power) {    Calculable result;    if (power == 2) {                        result = (int a) -> {            return a * a;        };    } else {                        result = a -> {            return a * a * a;        };    }    return result;}

上述代碼第 25 行和第 31 行都是實現 Calculable 接口的 Lambda 表達式。代碼第 25 行是標準形式沒有任何的簡化。代碼第 31 行省略了參數類型和小括號。


輸出結果為:

10二次方 = 100
10三次方 = 1000 

省略return和大括號

如果 Lambda 表達式體中只有一條語句,那麼可以省略 return 和大括號,代碼如下:

public static Calculable calculate(int power) {    Calculable result;    if (power == 2) {                        result = (int a) -> {            return a * a;        };    } else {                        result = a -> a * a * a;    }    return result;}

上述代碼第 12 行是省略了 return 和大括號,這是最簡化形式的 Lambda 表達式了,代碼太簡潔了,但是對於初學者而言很難理解這個表達式。


相關焦點

  • Java8 lambda表達式語法
    本文是該系列的第一篇,主要介紹Java8對屌絲碼農最有吸引力的一個特性—lambda表達式。java8的安裝工欲善其器必先利其器,首先安裝JDK8。過程省略,大家應該都可以自己搞定。但是有一點這裡強調一下(Windows系統):目前我們工作的版本一般是java 6或者java 7,所以很多人安裝java8基本都是學習為主。這樣就在自己的機器上會存在多版本的JDK。
  • Java8 lambda表達式
    java8中最大的變化就是引入了lambda表達式,一種緊湊的傳遞行為的方式,這也是本書剩下部分所要討論的內容,讓我們進入其中吧。同匿名內部類做法另外一種不同就是,我們申明變量的方式,之前,我們需要顯示申明類型ActionEvent,在該例中,我們不需要提供類型,編譯也能通過,在這背後發生的是javac從上下文獲取event類型,此處是從addActionListener籤名中獲取,這意味著你不需要顯示申明其類型,我們之後會更加詳細討論這種設計,首先讓我們看看編寫lambda表達式幾種不同的方法。
  • Java中Lambda表達式的5種不同語法
    (arr, (String m, String n) -> Integer.compare(m.length(), n.length()));System.out.println(Arrays.toString(arr));lambda表達式的標準語法包括以下內容:
  • Python每天一分鐘:lambda表達式 (匿名函數)及用法詳解
    lambda表達式介紹python中有一種靈活,便捷的且具有函數功能的表達式:lambda表達式!lambda 表達式可以用來替換局部函數(感興趣的讀者可以自行查閱「局部函數」),下面為大家演示lambda表達式的具體用法。
  • 大家都在說的「Lambda 表達式」到底是什麼?
    自從java8中引入了Lambda表達式之後,使用的人也越來越多了,這篇文章我們就來看看什麼是Lambda表達式。廢話少說,先看定義!2、簡單了解一下lambda的語法格式(參數) ->{語句; }上面就是lambda的語法格式,「->」是它的一個標誌,當你看到「->」你就知道這裡使用了Lambda表達式。3、再來看一下Lambda的特徵可選類型聲明:不需要聲明參數類型,編譯器可以統一識別參數值。
  • Python中的Lambda表達式
    Lambda表達式當我們需要做一些簡單的事情並且更希望快速完成工作而不是正式命名函數時,Lambda表達式是理想的選擇。Lambda表達式也稱為匿名函數。Python中的Lambda表達式是聲明小型匿名函數的一種簡短方式(沒有必要為Lambda函數提供名稱)。
  • Lambda表達式在Python事件中的運用
    本篇筆記內容:Lambda表達式詳解Lambda表達式在事件中的應用【1】Lambda表達式詳解lambda 表達式定義的是一個匿名函數,只適合簡單輸入參數,簡單計算返回結果,不適合功能複雜情況。lambda 定義的匿名函數也有輸入、也有輸出,只是沒有名字。語法格式如下:lambda 參數值列表:表達式其中,參數值列表即為輸入,表達式計算的結構即為輸出。看一個案例:求三個數的和。
  • 三種基本用法、五種應用場景,理清C++11新特性:Lambda表達式
    lambda表達式是指能夠捕獲作用域中的變量的無名函數對象,狹義的理解,就是匿名函數。無論是在項目中,還是在開源網站,總是能夠看到lambda的身影。為了能夠輕鬆閱讀代碼,進而熟練地使用,本文首先將講解lambda表達式的基本語法、三種基本用法,然後介紹五種實際的應用場景,最有總結說明lambda表達式的作用。
  • Python匿名函數:Lambda表達式
    我們以一張圖形進入主題:從圖中我們可以看出lambda表達式幾點特徵:簡潔性,符合了Python的一貫宗旨;起到了函數的作用,但未顯示函數名稱,這就是匿名函數;接著我們嘗試用lambda表達式來實現上述函數功能:# labmda表達式psum = lambda a,b,c:a + b + cprint(psum) # 驗證是否生成一個新對象
  • 「數據清洗」lambda表達式配合使用的四種函數
    >lambda 表達式是一個匿名函數,lambda表達式基於數學中的λ演算得名,直接對應於其中的lambda抽象,是一個匿名函數,即沒有函數名的函數。lambda表達式常用來聲明匿名函數,即沒有函數名字的臨時使用的小函數,常用在臨時需要一個類似於函數的功能但又不想定義函數的場合。它只可以包含一個表達式,不允許包含其他複雜的語句,但在表達式中可以調用其他函數,該表達式的計算結果相當於函數的返回結果。lambda表達式可以接受任意數量的參數,但函數只能包含一個表達式。
  • 詳解Java表達式與運算符
    第三小節 Java運算符運算符用於連接表達式的操作數,並對操作數執行運算。例如,表達式num1+num2,其操作數是num1和num2,運算符是」+」。在java語言中,運算符可分為5種類型:算術運算符、賦值運算符、關係運算符、邏輯運算符、位運算符。
  • Python學習第40課-Lambda表達式創建匿名函數
    之前我們學習了使用def關鍵字來創建自定義函數,這種方式創建的函數都是有函數名的,我們也可以創建沒有函數名的函數,這種函數叫做匿名函數。Python中可以使用Lambda表達式來創建匿名函數。lambda表達式用來創建匿名函數,那麼我們也可以把lambda表達式叫做lambda函數。
  • CSharp 基礎知識系列- 6 Lambda表達式和Linq簡單介紹
    嗯,簡單來講就是匿名函數,我們不聲明方法名,只寫一個方法體,這個方法體就是lambda表達式1. lambda表達式1.1 如何寫一個lambda表達式首先,在寫lambda表達式之前,需要先了解兩個特殊的類型:Func和Action。這是兩個委託,這裡先不急著了解什麼是委託,可以把它們當做一種名稱規範就行,它們都可以表示一個方法。
  • 給JAVA程式設計師的正則表達式一課
    正則基礎正則表達式(Regex,簡稱RE)是一種根據字符串集中的每個字符串的共同特徵來描述字符串集的方法。可用於搜索,編輯或處理文本和數據。簡單來說,正則表達式是幫助我們根據特定格式驗證或匹配字符串的方式。可以類比資料庫的SQL語言,sql是搜索數據,RE是搜索字符串。正則表達式和SQL語言是開發界的兩個偉大發明。
  • python入門基礎之lambda匿名函數詳解
    lambda作為一個表達式,定義了一個匿名函數,上例的代碼x,y為入口參數,x+y為函數體。在這裡lambda簡化了函數定義的書寫形式。python允許用lambda關鍵字創造匿名函數。匿名是不需要以標準的方式來聲明,比如說使用 def 語句。(除非賦值給一個局部變量,這樣的對象也不會在任何的名字空間內創建名字,上面的例子中會創建名字。)
  • lambda匿名函數都自嘆不如
    其中,一行代碼編寫與lambda表達式是最具代表性的方法,下面分別來介紹一行代碼編寫和lambda表達式的代碼之美。一行代碼我們都知道,創建列表的方式有多種,比如直接定義、使用list()函數轉換、使用for循環迭代輸出等等。
  • Java8中你可能不知道的一些地方之Lambda
    Lambda 表達式(也稱為閉包),它允許我們將函數當成參數傳遞給某個方法,或者把代碼本身當作數據處理。很多語言(Groovy、Scala等)從設計之初就支持 Lambda 表達式。但是 java 中使用的是匿名內部類代替。最後藉助強大的社區力量,找了一個折中的 Lambda 實現方案,可以實現簡潔而緊湊的語言結構。
  • Python面試題推薦:什麼是lambda函數?
    定義lambda函數的形式如下:labmda 參數:表達式lambda函數默認返回表達式的值。你也可以將其賦值給一個變量。lambda函數可以接受任意個參數,包括可選參數,但是表達式只有一個:>>> g = lambda x, y: x*y>>> g(3,4)12>>> g = lambda x, y=0,
  • 知道這5種正則表達式,能讓你少些2000行代碼
    正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學的一個概念。一個十分古老而又強大的文本處理工具,僅僅用一段非常簡短的表達式語句,便能夠快速實現一個非常複雜的業務邏輯。
  • Python小白學習記錄-匿名函數lambda
    匿名函數就是不需要通過def定義及顯示地指定函數名的函數匿名函數的特性(1)匿名函數只能有一個表達式,不用寫return,返回值就是該表達式的結果。(3)匿名函數也是一個函數對象,可以把匿名函數賦值給一個變量,再利用變量來調用該函數。(4)有些函數在代碼中只用一次,而且函數體比較簡單,不需要賦值給變量,直接調用可以減少代碼量,看起來比較」優雅「。