java8lambdas簡介

如果您是一名Java程式設計師,並且有興趣瞭解更多關於Java8Lambda的知識,那麼在本文中,我們將更深入地瞭解lambda語法和用法。...

如果您是一名Java程序員,並且有興趣瞭解更多關於Java8Lambda的知識,那麼在本文中,我們將更深入地瞭解lambda語法和用法。

java8-lambda-intro

Java中的lambda表達式是在表達式中表示類的方法的簡潔方法。它有一個參數列表和一個主體。主體可以是單個表達式或塊。它通常用於需要接口實現的地方。當需要一個接口作為調用方法的參數時,通常會出現這種需求。

一些簡單的lambda表達式

讓我們看看lambda表達式的一些簡單示例。

下面是一個lambda表達式,它接受兩個數字x和y並計算總和。

(int x,int y) -> x + y;

刪除參數類型以獲得更簡潔的表示形式:

(x, y) -> x + y;

定義不接受參數的函數:

() -> 404;

以下也是有效的,它不接受任何參數,也不返回任何內容:

() -> {}

對於單個參數,不需要將參數括起來:

x -> x + 1

更復雜的代碼塊也是可能的。下面的lambda接受一個單行參數並對其進行一些處理。請注意,參數的類型是從周圍上下文推斷出來的:

line -> {String[] x = pattern.split(line);return new Player(Integer.parseInt(x[0]), x[1], x[2], x[3], Integer.parseInt(x[4]));}

簡潔明瞭的編碼

使用lambda表達式有助於使代碼簡潔明瞭。為了幫助實現這一點,Java8類大量使用lambdas。

在列表或集合上循環

諸如List、Set、Queue之類的集合類實現了Iterable接口,這使得在元素上進行循環更加容易。

聲明姓名列表。

List<String> names = Arrays.asList("Joe", "Jack", "James", "Albert");

不使用lambda循環列表:

for (String name : names) { System.out.println(name);}

使用lambda,可以將上述循環編寫為:

names.forEach(name -> System.out.println(name));

使用Java 8方法引用,上述內容可以更簡潔地寫成:

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

在地圖上循環

映射是鍵到值的映射。在映射上循環涉及在每個(鍵、值)映射上循環。比較一下在這種情況下如何使用lambdas。

首先定義地圖:

Map<String,Integer> map = new HashMap<>();map.put("Atlanta, Georgia", 110);map.put("Austin, Texas", 115);map.put("Baltimore, Maryland", 105);map.put("Birmingham, Alabama", 99);map.put("Boston, Massachusetts", 98);

您可以用傳統的方式在地圖上循環:

for (Map.Entry<String,Integer> e : map.entrySet()) { System.out.println(e.getKey() + " => " + e.getValue());}

下面是如何使用lambdas以快速簡潔的方式完成相同的操作:

map.forEach((k, v) -> System.out.println(k + " => " + v));

功能接口

lambda表達式的返回類型是什麼?換句話說,在下面的語句中X的類型是什麼?

X x = a -> a + 1;

lambda表達式的返回類型是一個函數接口-一個具有單個抽象方法的接口。可以使用兼容的抽象方法將lambda表達式指定給接口。下面是一些例子。

創建多線程任務

考慮創建一個在單獨線程中執行的任務——您需要將任務定義為可運行接口並實現run()方法。這裡Runnable是一個函數接口。

class MyTask implements Runnable { ... public void run() { // implement your task here System.out.println("Running in a separate thread now."); } ...}

然後可以創建MyTask類的實例,並使用它來啟動新的執行線程。

MyTask task = new MyTask();Thread thread = new Thread(task);thread.start();

使用lambda,創建Runnable的過程變得更加簡單。上面的任務定義可以重寫為:

Runnable task = () -> System.out.println("Running in a separate thread now.");

甚至:

Thread thread = new Thread(() -> System.out.println("Running in a separate thread now."));thread.start();

使用比較器進行比較

比較器是一個功能接口,用於比較給定類型的對象。它定義了一個名為compare()的抽象方法,可以使用lambda表達式定義該方法。

下面是一個lambda表達式,它創建了一個用於不區分大小寫地比較字符串的比較器。

Comparator<String> cmp = (x, y) -> x.compareToIgnoreCase(y);

一旦創建了比較器功能接口的實例,就可以根據需要重新使用它。

在這裡,我們按升序對字符串列表進行排序。

List<String> names = Arrays.asList("Joe", "Jack", "James", "Albert");Collecti***.sort(names, cmp);names.forEach(System.out::println);// printsAlbertJackJamesJoe

上面的列表已排序到位。我們現在可以使用binarySearch()方法進行搜索,如下所示:

System.out.println("search(Joe):" + Collecti***.binarySearch(names, "Joe", cmp));# printssearch(Joe):3

從列表中計算最大值和最小值也很容易使用lambdas。

定義一些數據:

List<Integer> temps = Arrays.asList(110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88);

使用lambda表達式定義比較器:

Comparator<Integer> cmpTemp = (x, y) -> Integer.compare(x, y);

並打印最大值和最小值:

System.out.println("------ Max/Min ------");System.out.println(Collecti***.max(temps, cmpTemp) + "/" + Collecti***.min(temps, cmpTemp));

在gui編程中的使用

Lambda表達式在GUI編程中也非常有用,可以實現事件處理程序。下面是一個使用按鈕單擊處理程序的示例。

JButton button = new JButton("Click Me");button.addActionListener(e -> System.out.println("Button clicked!"));

這是在Java8中使用lambdas的簡要介紹。

自從Java8以來,lambdas讓你的生活變得更輕鬆了嗎?請在下面的評論中解釋。

  • 發表於 2021-03-12 08:09
  • 閱讀 ( 48 )
  • 分類:程式設計

你可能感興趣的文章

如何製作youtube簡介(以及4個免費工具)

...介紹一些免費工具,這些工具將幫助您建立自己的YouTube簡介。 ...

  • 發佈於 2021-03-25 01:41
  • 閲讀 ( 48 )

如何在googlechrome中自動跳過netflix簡介

...謝天謝地,有很多googlechrome擴充套件可以幫你處理“跳過簡介”按鈕。 自動跳過簡介 一旦安裝,這個免費的瀏覽器擴充套件自動點選“跳過簡介”按鈕,只要它出現在您的網頁瀏覽器。你所要做的就是去谷歌Chrome網上商店下...

  • 發佈於 2021-03-31 22:38
  • 閲讀 ( 33 )

去看看這篇獨角獸暴動的簡介吧,它是當前抗議活動不可或缺的見證人

...動。《紐約客》發表了一篇非常精彩(雖然很短)的小組簡介,值得你花時間閱讀。 正如作家特洛伊·帕特森(Troy Patterson)所解釋的,獨角獸暴動是這些**活動的重要見證人:“報道令人印象深刻的是它與社群的親密關係,它...

  • 發佈於 2021-04-19 01:10
  • 閲讀 ( 45 )

肯德基透過接管藝人簡介,在spotify premium上偷偷投放廣告

...ium的無廣告平臺的方法:他們接管了該地區三位藝術家的簡介。這項活動以設計出租車為特色,與Flipperachi、Moh Flow和Shébani等藝術家合作,用肯德基新漢堡的照片替換他們的簡介標題、專輯封面和簡介頭像。這段新聞影片吹噓說...

  • 發佈於 2021-04-20 01:42
  • 閲讀 ( 34 )

彭博社簡介史蒂夫鮑爾默,沒有找到一個猴子男孩

...下,一定要檢視彭博商業週刊對這位受人敬愛的執行長的簡介。它在某種程度上消除了“在無數YouTube影片中看到的汗流浹背、氣喘吁吁、興高采烈的小丑形象,比如十年前的“猴子男孩”舞蹈。”這也是一個相當不錯的對這個...

  • 發佈於 2021-04-21 02:16
  • 閲讀 ( 34 )

蘋果ii的設計者傑裡·馬諾克的簡介

佛蒙特州《七天》雜誌刊登了對傑瑞·馬諾克(Jerry Manock)的採訪,他是蘋果II和第一款一體機Macintosh的設計師。正如沃爾特·艾薩克森(Walter Isaacson)的傳記《史蒂夫·喬布斯》(Steve Jobs)中所描述的那樣,馬諾克(下圖,最右...

  • 發佈於 2021-04-21 07:31
  • 閲讀 ( 44 )

看這個:用動態影象重新製作的“壞的突破”簡介

《破壞者》是近幾年來最為黯淡的一部引人註目的電視劇,但它陰暗的主題和前景並沒有阻止創意迷們向沃爾特·懷特和他的公司致敬。最新的一張照片來自馬丁·沃蒂斯塞斯,他最初只畫了一幅急需現金的藥劑師的肖像,後來...

  • 發佈於 2021-04-24 02:18
  • 閲讀 ( 39 )

蘋果ceo蒂姆·庫克簡介新書

前《華爾街日報》記者凱恩(Yukari Kane)的新書將介紹蘋果神祕的執行長蒂姆•庫克(Tim Cook)。《出沒的帝國:史蒂夫·喬布斯之後的蘋果》是一項詳盡調查的結果,它將超越庫克廣為宣傳的山露水習慣和健身制度,揭示這位“...

  • 發佈於 2021-04-25 11:31
  • 閲讀 ( 49 )

交通論壇簡介

親愛的Verge讀者,&#13; 我有一個自白:我花了一天的大部分時間,在我的腦海裡播放著一個病態的慢動作倦怠的GIF,令人噁心。很光榮。這種情況已經持續發生了大約20年,我預計不會很快停止(如果我們交談時,我好...

  • 發佈於 2021-04-27 11:55
  • 閲讀 ( 34 )

twitter推出ios應用程式“whileyouarea”(當你不在時)簡介

...了它的iOS應用程式後,今天將推出它的“whileyou was away”簡介。現在,當你在蘋果裝置上開啟Twitter的官方應用程式時,你將能夠看到自上次登入以來錯過的熱門或相關tweet的快照。該公司表示,該功能將很快在其Android應用程式和...

  • 發佈於 2021-04-28 17:52
  • 閲讀 ( 25 )
oyr07004
oyr07004

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦