你在使用Lambda表達式嗎?| 文末互動送書

「Java 8 的函數式編程都在哪兒用啊?」

前幾天,當有人向我提出這個問題的時候,我還真是愣了一下,是啊,2014年 Java8 已經發布了,函數式編程的特性是一個重頭戲,有一段時間挺火熱的,網上的文章也鋪天蓋地,可是我在工作和學習中用得並不多啊。

Java 的每一個版本都會引入不少新特性,同時儘可能地向後兼容,這一點確實挺棒的。

比如JDK 1.1 中引入了JDBC, Java Bean 。

JDK1.2(J2SE 1.2 )中的JIT Complier 。

JDK1.4  (J2SE 1.4) 中的 非阻塞IO。

JDK 5 (宣傳需要,命名改變,從1.4 直接變為5) 中的泛型和註解,強化的for each循環。

JDK 8 增加了函數式編程。

JDK 9 增加了模塊化支持。

......

這些版本中我覺得對程序員

日常coding

影響最大的可能就是 JDK 5。

泛型增強了類型安全,每次創建一個集合變數時,如果不聲明類型簡直就覺得難受。

List list = new ArrayList();

自定義註解則可以給類、方法、欄位添加了元數據,這一點點的元數據就讓Spring之類的框架大顯身手。

@Controller , @Autowired, @RequestMapping ......極大地簡化了程序的配置,讓程序容易編寫,容易閱讀,解放了生產力。

增強的for each 讓人用起來也非常舒服:

List list= ......

for(Employee e: list){

    //do something.

}

這些JDK的特性改變了編程的習慣,提升了程序員的生產力,是程序員的福音,所以大家都喜歡使用。

(參見《Java帝國之泛型》、《Java註解是怎麼上位的》)

回到Java 8 的函數式編程,Lambda表達式,這個特性的加入對於日常coding來說似乎不是一個必須品,更重要的是要想寫出好的Lambda表達式,思維能力必須得有一定程度的提升和轉換才可以。

程序員必須得能意識到Java是一門靜態類型的語言,一個變數必須有類型,並且不能改變。 所以Java中的Lambda表達式也必須有個類型(介面)才行。

(參見:《Java 的Lambda表達式有什麼用?》)

除此之外,思維也需要從描述「how」變成描述 「what」, 從過程式變成聲明式。

這兩個障礙在實際編程中表現就是: 

Lambda表達式不容易理解,寫起來不容易,也不好調試。

「還不如用我那簡單的for each 循環!」  

特別是有些人為了炫技增加了閱讀的難度。

我自己在工作學習中偶爾在兩個地方使用Lambda表達式, 一個是

對集合做遍歷的時候

,用了一點兒filter和map ; 還有就是用

Lambda表達式來替換匿名類

,這個用起來比較爽。

《Java 8函數式編程》一書中提到了並行編程,利用stream對象的parallel方法讓其擁有並行操作的能力,可以充分利用CPU的多核能力。 還有一節講的是「使用Lambda表達式實現領域特定語言」。

我不太清楚有多少人在實戰中使用類似的功能,在

這裡做個有獎調查,大家可以通過留言

聊一聊你在工作中是怎麼使用Java 8的Lambda表達式的

我會選擇三個人,送出三本簽名版的《碼農翻身》

碼農翻身,用故事講解技術本質, 更多精彩文章,請移步《

碼農翻身三年文章精華

推薦閱讀:

馬英九王毅新春寄語 兩岸互動 繼往開來
女孩為了不讓愛犬被冷落,竟然做了一個隔空互動的發明
講堂直擊|109期現場精彩互動先睹為快《「一帶一路」2.0:開創新型全球化》
謝娜微博與何炅有愛互動顯鬼馬

TAG:表達 | 互動 | Lambda表達式 |