Java中Lambda表達式的5種不同語法

2021-01-07 Java從零開始

1.標準語法

考慮以下示例:

String[] arr = {"program", "creek", "is", "a", "java", "site"};

Arrays.sort(arr, (String m, String n) -> Integer.compare(m.length(), n.length()));

System.out.println(Arrays.toString(arr));

lambda表達式的標準語法包括以下內容:

1. 用括號括起來的形式參數的逗號分隔列表。在這種情況下(String m, String n)

2. 箭頭標記 ->

3. 主體,由單個表達式或語句塊組成。在這種情況下,它是一個單一表達式-Integer.compare(m.length(), n.length())

Output:

[a, is, java, site, creek, program]

2.可以推斷參數類型

如果可以從上下文中推斷出參數的參數類型,則可以省略該類型。

在上面的代碼中,可以將m和n的類型推斷為String,因此可以省略該類型。這使代碼更整潔,更像真正的lambda表達式。

3. Lambda表達式中的多行代碼

如果代碼不能一行編寫,則可以將其括在{}中。現在,該代碼應明確包含return語句。

String[] arr = { "program", "creek", "is", "a", "java", "site" };Arrays.sort(arr, (String m, String n) -> {

if(m.length() > n.length())

return-1;

else

return0;});System.out.println(Arrays.toString(arr));

[program, creek, java, site, is, a]

4.推斷類型的單參數

當可以推斷類型時,對於單參數lambda表達式可以省略括號。

String[] arr = { "program", "creek", "is", "a", "java", "site" };

Stream<String> stream = Stream.of(arr);

stream.forEach(x -> System.out.println(x));

a

is

java

site

creek

program

5.方法參考

通過使用方法引用,前面的代碼也可以編寫如下:

stream.forEach(System.out::println);

6.無參數

當沒有參數用於函數時,我們也可以編寫lambda表達式。例如,它看起來可能如下所示:

最後,開發這麼多年我也總結了一套學習Java的資料與面試題,如果你在技術上面想提升自己的話,可以關注我,私信發送領取資料或者在評論區留下自己的聯繫方式,有時間記得幫我點下轉發讓跟多的人看到哦。

相關焦點

  • Lambda 表達式,簡潔優雅就是生產力!
    為了避免後來的人在這個接口中增加接口函數導致其有多個接口函數需要被實現,變成"非函數接口」,我們可以在這個上面加上一個聲明@FunctionalInterface, 這樣別人就無法在裡面添加新的接口函數了:這樣,我們就得到了一個完整的Lambda表達式聲明:2Lambda表達式有什麼作用
  • Java之使用Lambda表達式,定義一個無參數無返回值的方法
    各位小夥伴們大家好,在之前的文章中,小編簡單介紹了Lambda表達式Java之Runnable表達式的簡單介紹,這次小編要介紹的是,使用Lambda表達式,定義一個無參數無返回值的方法static void invokePhone(Phone call) {call.ringUp();}}這是用匿名內部類的方法來定義,就是制定一種做事情的方案,一方面匿名內部類可以幫我們省去實現類的定義,但是匿名內部類的語法有點複雜
  • 面試官寫了個雙冒號:問我這是什麼語法?Java中有這玩意?
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫一:簡潔二:方法引用三:Optional 可選值一:簡潔方法引用分為三種,方法引用通過一對雙冒號:: 來表示,方法引用是一種函數式接口的另一種書寫方式靜態方法引用,通過類名::靜態方法名, 如 Integer::parseInt
  • JDK/JAVA 13正式版發布
    歸檔類將包括默認的基礎層CDS(class data-sharing)存檔中不存在的所有已加載的應用程式類和庫類。JEP 351,ZGC: Uncommit Unused Memory:增強ZGC以將未使用的堆內存返回給作業系統。
  • 深入淺出Rhino:Java與JS互操作
    具體如下:  1、 將下載包中的js.jar文件加入系統CLASSPATH中。  2、 運行js解釋器java org.mozilla.javascript.tools.shell.Main。),在效果上等價於Java聲明import java.io.*; 不同的是,Java會隱式import java.lang.
  • Java程式設計師:如何有效地使用Java HashMap
    HashMap 是我們日常Java編程中使用最多的數據結構之一。本文中,我們將回顧一下HashMap是什麼、什麼原理以及如何使用。在此之前,我們先來看一個例子。假設你有一家雜貨店,店裡有很多東西,這些東西的名稱和價格肯定各不相同,記住所有這些產品可能很困難。雖然您已將所有這些產品都寫在筆記本中,但每當您銷售產品時,您必須查看該筆記本來了解價格。
  • JavaScript-正則表達式中的修飾符和對象有哪些?
    1.2 正則表達式基本語法正則表達式的基本語法語法:/正則表達式主體/修飾符(可選)例如:var frk_reg = /frank/gi;其中而實際上在js中已經為正則表達式提供了一個構造函數RegExp,我們可以通過這個構造函數來生成一個正則表達式的實例,而這種創建正則的方法我們稱之為【構造函數創建正則表達式】。
  • Java和Go語言,三方面比較,二選一很難嗎?
    一,程式語言從程式語言本身來說,Java首次推出在1995年5月,Go在2009年11月正式推出。1,Java兩種語言各有特點,Java經歷了20多年,一直在不斷更新推出新版本。和早期版本相比,從Java8開始,吸收了越來越多的現代化程式語言的優點,比如lambda表達式。
  • Java字符串替換( )replaceFirst( )&replaceAll(),你學會了嗎?
    在這些幫助下,您可以替換字符串中的字符。讓我們詳細研究一下:1.Java字符串替換( )方法描述:此Java方法返回一個新字符串,該字符串是由用新字符替換每次出現的字符而產生的。語法:public Str replace(char oldC, char newC)參數:oldCh old character.
  • 跟我學java編程—Java的Scanner類
    當程序需要從鍵盤獲取用戶輸入的命令或數據時,例如:獲取用戶輸入的計算表達式。可以通過Scanner類方便地獲取用戶輸入。語句「import java.util.*;」,用於導入包含Scanner的類庫,Scanner包含在Java 核心類庫util中,要使用Scanner類,必須導入java.util庫,類庫導入關鍵字為import。
  • 動力節點Java學院2021年Java學習路線圖最新出爐啦
    Java在程式語言排行榜中一直牢牢佔據榜首位置,幾乎所有的大中型網際網路的應用系統在伺服器端開發首選都是Java編程,正因如何吸引這不少年輕人投入該行業,Java雖不想其它程式語言那麼複雜,但是知識體系還是很龐大的,因此想要學好並非容易之事,不少想要跨入Java編程行業的同學們通過網絡搜索各式各樣的學習資料
  • 使用Java8 Stream API對Map類型按照鍵或值進行排序
    在這篇文章中,您將學習如何使用Java對Map按照鍵或值進行排序。前幾日有位朋友面試遇到了這個問題,看似很簡單的問題,但是如果不仔細研究一下也是很容易讓人懵圈的面試題。所以我決定寫這樣一篇文章。在Java中,有多種方法可以對Map進行排序,但是我們將重點介紹Java 8 Stream,這是實現目標的一種非常優雅的方法。
  • 巧用Java8中的Stream,讓集合操作飛起來!
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫作者:堅持就是勝利juejin.im/post/5d5e2616f265da03b638b28a簡介
  • 用棧結構解決表達式求值問題
    本文主要討論用棧結構解決表達式求值問題】表達式求值在編譯程序和計算程序中被經常應用,表達式本身是一個字符序列,要實現對表達式求值,首先要能夠正確解釋表達式。在程式語言中,表達式是由變量、常量和運算符的組合,它執行計算並返回計算結果。在表達式中運算符作用的變量或常量稱為操作數。
  • Linux shell編程 17 grep和正則表達式
    使用正則表達式使模式匹配加入一些規則,因此可以在抽取信息中加入更多選擇。使用正則表達式時最好用單引號括起來,這樣可以防止 g r e p中使用的專有模式與一些 s h e l l命令的特殊方式相混淆。使用模式5 . . 1 9 9 [ 6 , 8 ]。這意味著第一個字符為 5,後跟兩個點,接著是 1 9 9,剩餘兩個數字是 6或8。查詢包含1 9 9 8的所有記錄的另外一種方法是使用表達式 [ 0 - 9 ] { 3 } [ 8 ],含義是任意數字重複3次,後跟數字8,雖然這個方法不像上一個方法那麼精確,但也有一定作用。
  • 解讀Java數據及數據類型內幕
    例如,在數學運算包含大量的計算表達式,計算程序需要有連續處理計算表達式和計算數據的處理能力,下面是一個簡單的四則運算表達式:15.8+20計算程序要處理上述表達式,就需要具備存儲小數、整數、運算符的存儲結構。Java語言提供了存儲小數、整數、運算符的基本數據類型。
  • java——Scnner()類下面有幾種方法呢?
    一、Scnner類 Scnner類在java.util包中一個可以使用正則表達式來解析基本類型和字符串的簡單文本掃描器然後可以使用不同的 next 方法將得到的標記轉換為不同類型的值。 例如,以下代碼使用戶能夠從 System.in 中讀取一個數: 再看一個例子,以下代碼使 long 類型可以通過 myNumbers 文件中的項分配: 掃描器還可以使用不同於空白的分隔符。
  • Java爬蟲之利用Jsoup自製簡單的搜尋引擎
    內容導讀在上述代碼中,url為輸入詞條(暫時僅限於英文),進入while循環可一直搜索,當輸入為』exit』時退出。contentText為該詞條的百度百科簡介的網頁形式,通過正則表達式將其中的文字提取出來。