Java lambda和函數接口

來自http://yanwushu.sinaapp.com/

SAM(singleabstract method),也稱爲函數接口,即只有一個方法的接口,比如EventListener就是一個SAM。最好的SAM只有一個參數,因爲這將會進一步簡化lambda表達式的編寫。使用lambda表達式可以簡化sam的調用。

比如用


listeners.add(c-> System.out.println(c.message()));
替代
listeners.add(newEventListener() {
 @Override
 publicvoid message(MessageContext c) {
   System.out.println(c.message()));
 }
});


以SAM的方式用jOOX處理XML:


$(document)
 //Find elements with an ID
 .find(c-> $(c).id() != null)
 //Find their child elements
 .children(c-> $(c).tag().equals("order"))
 //Print all matches
 .each(c -> System.out.println($(c)))


 

在EF(.net平臺的orm框架)中sam也有同樣的用法:

context.MyUser.where(t->t.id= 1 && t.name.contains(‘yanwushu’));

備註:有許多關於Java8 lambda表達式和改善的Collections API的有趣的博客:

·        http://blog.informatech.cr/2013/04/10/java-optional-objects/

·        http://blog.informatech.cr/2013/03/25/java-streams-api-preview/

·        http://blog.informatech.cr/2013/03/24/java-streams-preview-vs-net-linq/

·        http://blog.informatech.cr/2013/03/11/java-infinite-streams/

 

發佈了87 篇原創文章 · 獲贊 19 · 訪問量 63萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章