你在使用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
自定義註解則可以給類、方法、欄位添加了元數據,這一點點的元數據就讓Spring之類的框架大顯身手。
@Controller , @Autowired, @RequestMapping ......極大地簡化了程序的配置,讓程序容易編寫,容易閱讀,解放了生產力。
增強的for each 讓人用起來也非常舒服:
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:開創新型全球化》
※謝娜微博與何炅有愛互動顯鬼馬