Lambda的出現就是為了增強Java面向過程程式設計的深度和靈活性。今天就來分享一下在Java中經常使用到的幾個示例,通過對比分析,效果應該會更好。
–
其存在的意義就是用Lambda來代替匿名類,如下:
我們可以使用下面的文法來完成Lambda的書寫:
(params) -> expression
(params) -> statement
(params) -> {statements}
如果表達式不需要參數,那麼可以簡寫如下:
<code>() -> Ssytem.out.println("Something Here!");</code>
這裡拿Swing程式設計來舉例,主要的作用是簡化事件監聽器的代碼書寫。
不難看出,使用Lambda來代替匿名類是一件很優雅的事情。
周遊輸出一個集合是一件很簡單但是很繁瑣的事情,但是有了Lambda之後,一切。又将變的優雅起來。
為了使得Java支援函數程式設計,Java8 加入了一個新的包java.util.function,其中有一個接口java.util.function.Predicate 是支援Lambda函數程式設計。
上面的filter(item -> item.startWith(“J”))就是對此接口的簡單的使用,這便是因為Lambda支援接口調用的展現。
詳細的操作方式,我們可以參考Stream API來進行更加複雜的操作。
此處主要示範的是結合流操作,類似于Linux的管道指令。
在流操作的整個過程中,StreamAPI内使用的就是我們定義好的Predicate實作。是不是感覺很友善啦。
類比Python中的可變數組,Java8 的Map就是實作了類似的功能。我們可以友善的借助Lambda來實作元素資訊的改變。
reduce() 是将集合中所有的值結合,彙聚到一個值中,Reduce類似SQL語句中的sum(),avg(),count()等等。
Filtering是對大型Collection操作的一個通用操作,Stream提供filter()方法,接受一個Predicate對象,意味着你能傳送lambda表達式作為一個過濾邏輯進入這個方法:
使用Stream的distinct()方法過濾集合中的重複性的元素。
最後,推薦一個比較好的StreamAPI的介紹網址,裡面有很多詳細的示例,相信對大家的變成會有很大的幫助。
<a href="http://www.journaldev.com/2774/java-8-stream">http://www.journaldev.com/2774/java-8-stream</a>