一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java8學習教程之lambda表達式語法介紹

Java8學習教程之lambda表達式語法介紹

2021-01-04 16:27tantanit Java教程

眾所周知lambda表達式是JAVA8中提供的一種新的特性,它支持Java也能進行簡單的“函數式編程”。 下面這篇文章主要給大家介紹了關于Java8學習教程之lambda表達式語法的相關資料,需要的朋友可以參考下。

前言

相信大家都知道,在Java8 中引入了 lambda 表達式,從行為參數化的角度,在使用時,將行為作為參數,去除包圍在外層的不必要的類聲明,使代碼更加簡潔。

lambda 表達式的語法

lambda 表達式由參數,->,以及函數體三部分組成。其實函數體可以是表達式,也可以是語句。語句應該包含在{} 里,而表達式不能。

lambda 表達式舉例

?
1
2
3
4
5
6
(List<String> list) -> list.isEmpty() // 布爾類型表達式
() -> new Apple(10) // 創建一個新對象
(Apple a) -> { System.out.println(a.getWeight()); } // 使用一個對象的屬性
(String s) -> s.length() // 選擇或提取一個對象的屬性
(int a, int b) -> a * b // 組合兩個參數
(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()) // 比較兩個對象

行為參數化

可以看到,lambda 表達式著重表達了行為。其實在 java8 之前,就已經有類似將行為作為參數進行處理的例子:

?
1
2
3
4
// java.util.Comparator
public interface Comparator<T> {
 public int compare(T o1, T o2);
}
?
1
2
3
4
5
inventory.sort(new Comparator<Apple>() {
 public int compare(Apple a1, Apple a2){
 return a1.getWeight().compareTo(a2.getWeight());
 }
});

在上面的例子中,定義了一個 Comparator 接口,并且定義了 compare 方法。List 類型的 inventory,定義了 sort 方法,該方法以 Comparator 作為參數。在使用時,生成一個匿名或不匿名的 Comparator 對象,該對象實現了 compare 方法,指定了具體的比較行為,再將 Comparator 對象作為參數,傳給 sort 方法。實際上的作用,就是將比較行為,作為參數,傳給 sort 方法,這種思想和做法就叫作“行為參數化”。一個使用的方法(比如 sort 方法)可以對應多種行為,當需要更改行為時,只需要修改表示行為的代碼,使用方不必做出修改,增加了代碼的健壯性。

匿名內部類

而像上面的例子中,直接 new 一個 Comparator 類型對象,而沒有定義一個變量保存該對象的引用,叫做使用匿名內部類。在匿名內部類的情況下,由于方法不能重復使用,可以更加明顯地看到代碼的冗余。因為每次在使用時需要手動 new 一個對象,并且還要寫出 compare 方法的簽名,而真正有用的其實只是 compare 的方法體。在 Java8 中,使用 lambda 表達式,可以簡化這些代碼。比如上面的 sort 方法的使用,可以簡化為:

?
1
inventory.sort((Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight() ) );

定義線程的例子:

?
1
2
3
4
5
Thread t = new Thread(new Runnable() {
 public void run(){
 System.out.println("Hello world");
 }
});

可以簡化為:

?
1
Thread t = new Thread(() -> System.out.println("Hello world"));

GUI 中點擊事件的例子:

?
1
2
3
4
5
6
Button button = new Button("Send");
button.setOnAction(new EventHandler<ActionEvent>() {
 public void handle(ActionEvent event) {
  label.setText("Sent!!");
 }
 });

可以簡化為:

?
1
2
Button button = new Button("Send");
button.setOnAction((ActionEvent event) -> label.setText("Sent!!"));

可以看出,lambda 表達式更加簡潔,也可以使開發者在讀寫代碼時,可以更加專注在定義的行為上。

小結

這篇文章介紹了 lambda 表達式的語法,引入 lambda 表達式的使用場景,以及使用 lambda 表達式的好處。我們將在下篇文章中講解如何定義和使用 lambda 表達式,以及與其它語言相比,lambda 表達式在 Java 中的特殊規范。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://tantanit.com/java8-lambda/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 四虎成人免费观看在线网址 | 182免费在线观看 | 视频高清在线观看 | 极限淫生小说 | 五月桃花网婷婷亚洲综合 | 精品一区二区三区高清免费不卡 | 欧美成人精品福利网站 | 欧美人与禽交片在线播放 | 日产精品一卡2卡三卡4乱码久久 | 亲爱的客栈第二季免费观看完整版 | 国产精品青青青高清在线 | 4hu影院永久在线播放 | 大胆人gogo888体艺术在线 | 四虎黄色网址 | 男人操女人动图 | www.精品视频 | 免费91麻豆精品国产自产在线观看 | 久久久久久久尹人综合网亚洲 | 亚洲精品国产成人中文 | 3黑人巨大vs北岛玲 3d肉浦团在线观看 3d动漫免费 | 国产精品日韩欧美一区二区 | 亚洲AV午夜精品麻豆AV | pregnantsexxx临盆孕妇 | 亚洲 另类 欧美 变态屎尿 | 国产精品欧美日韩一区二区 | 手机在线免费观看视频 | 大吊小说 | 超爽人人做人人爽 | 精品欧美一区二区三区四区 | 我要色色网 | 紧身牛仔裤美女被啪啪久久网 | 逼毛片 | bedfriend泰剧全集免费观看 | 天天色天天综合 | 日本高清视频网址 | 天天爽天天干天天操 | 国产麻豆精品免费视频 | nxgx欧美 | 日韩操比视频 | 小伙无套内射老女人 | 国产精品免费综合一区视频 |