日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

为什么Java需要lambda 表达式?

發布時間:2025/7/14 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么Java需要lambda 表达式? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java 為什么會引入lambda ?

在Java8出現之前,如果你想傳遞一段代碼到另一個方法里是很不方便的。你幾乎不可能將代碼塊到處傳遞,因為Java是一個面向對象的語言,因此你要構建一個屬于某個類的對象,由它的某個方法來放置你想傳遞的代碼塊。

下面看兩個非常典型的例子,構造線程與比較器:

構造線程:

我們要想在另一個線程中執行一些代碼邏輯時,通常會將代碼放在一個實現Runnable接口的run方法當中,如下圖:

public static void main(String[] args) {myThread t = new myThread();}class myThread implements Runnable {@Overridepublic void run() {System.out.println("放入你想執行的代碼");} }

你寫這段代碼的目的就是想開啟新的線程來執行你定制的代碼,為此你創建了myThread

接著我們看下構造比較器:

public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(2);list.add(5);list.add(1);list.add(4);list.add(3);Comparator<Integer> comparator = new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2 - o1;}};Collections.sort(list, comparator); }

sort 方法會不斷調用compare 方法,對順序不對的元素進行重新排序,直到有序為止。你寫比較器的目的就是給Collections的sort方法傳遞一段比較邏輯的代碼片段,這段代碼會被整合到排序排序邏輯中,為此你寫了一個類和一個方法

上述兩個例子你會看到它們的相似點,將一段代碼傳遞給其他調用者(一個線程池或者一個排序方法),這段代碼會在新的方法中被調用。

但是,在Java8出現之前,如果你想傳遞一段代碼到另一個方法里是很不方便的,因為Java是一個面向對象的語言,因此你要構建一個屬于某個類的對象,由它的某個方法來放置你想傳遞的代碼塊。而在一些其他語言中可以直接傳遞代碼塊,比如JS。為此,Java決定加入了lambda表達式的語法糖。

lambda改造

對于傳入比較器代碼塊,我們的目的是想傳入一段比較邏輯,利用lambda表達式可以:

lambda表達式的語法格式是:參數->一個表達式,如果想傳入的代碼無法用一個表達式表示,則可以用 參數->{多個表達式}。如果沒有參數需要傳遞,則可以用()->表達式的形式。

public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(2);list.add(5);list.add(1);list.add(4);list.add(3);Collections.sort(list, (one,two)->{System.out.println("one="+one);System.out.println("two="+two);return two - one;});}

編譯器會解析出來 one 與 two 是原先接口compare方法的入參,并自動賦予Integer類型。

對于構造線程,我們的目的就是想傳入一段線程執行的代碼,利用lambda表達式可以這樣做:

public static void main(String[] args) {new Thread(() -> {for (int i = 0; i < 100; i++) {System.out.println("這是一個線程" + i);}}).start();for (int i = 100; i < 200; i++) {System.out.println("這是主線程" + i);} }

從上述的例子可以看出,有了lambda表達式,傳遞代碼塊變得更為簡單,對于一些特定的使用場景,例如Steam API,lambda會大大提高你的代碼效率,并且比傳統的方式要更為易讀(當然,前提是你知道lambda表達式的語法)。

總的來說,所有的lambda表達式都是延遲執行的,如果你希望立即執行一段代碼,那就沒必要使用lambda表達式了,延遲執行代碼的原因有很多種:

  • 在另一個線程中運行代碼
  • 多次運行代碼
  • 在某個算法的正確時間點上運行代碼(如排序中的比較邏輯)
  • 某些條件觸發時運行代碼(數據到達,接口回調等)
  • 在實際工作中還是比較推薦大家使用的,有人可能會拿性能說事,但你想一想lambda表達的性能損耗可比查詢一次MySQL代價小的太多了。

    轉載于:https://www.cnblogs.com/keeya/p/11404631.html

    總結

    以上是生活随笔為你收集整理的为什么Java需要lambda 表达式?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。