Java—Lambda基礎

雖然JVM有着Scala 、Groovy 、Clojure 等依賴於JVM的函數語式語言,但直到Java8纔算是java正式支持函數式編程
  Java8中加入了Lambda的支持標誌着Java正式加入了混合式編程語言(支持命令式編程與函數式編程)的行列;像C#、Python都是同時支持兩種編程範式,近年來函數式編程愈演愈烈,大有命令式編程向函數式編程靠攏的趨勢;
  命令式編程與函數式編程的最基本區別在於使用的計算模型的不一樣,命令式編程是基於圖靈機的,而函數式編程使用的是lambda演算; 有了lambda的支持使用Java8能夠寫出可讀性更高的代碼,減小代碼的繁雜度、傳遞行爲等;java

比較

  像以前咱們實現一個接口的時候能夠使用匿名內部類的方式,先看下匿名內部類實現:編程

Runnable primitive=new Runnable() {
   @Override
   public void run() {
       System.out.println("inner class");
      } 
  };

lambda的實現: Runnable lambda = ()-> System.out.println(" lambda ");
  比較兩種實現方式lambda的簡潔程度是匿名內部類無法比的,lambda實現能夠理解爲傳遞行爲給Runnable,而匿名內部類則是現實了Runnable接口;
是否是lambda能夠代替匿名內部類出如今全部地方呢? 答案不是的。 Lambda只能代替內部類出如今的接口爲函數接口(FunctionalInterface)的地方。app

語法

lambda語法:  () -> {}

 一、 ()裏面爲函數接口的參數,{} 與要傳遞到函數接口的語句;
 二、 lambda方式若是有多條語句還能夠用{ 括號括起來;
 三、 如只有一條語句則能夠省略{},函數接口存在返回值當->後面只有單條語句時return能夠省略,若有多條語句則須要顯示return返回該值;

函數接口(Functionalnterface):只定義一個抽象方法的接口默認爲函數接口,接口中能夠有default方法和static方法,也能夠使用@FuncationalInterface註解該接口;編程語言

簡單應用

//實現x+y相加
    BinaryOperator<Integer> addOperator = (x, y) -> x+y;
    System.out.println(addOperator.apply(3,4));

  Java8中除了在Runnable、Comparator等以往存在的接口添加了FuncationalInterface註解外還在java.util.function包中新加入了大批FuncatinalInterface接口;使用java.util.function包下面的接口能夠大大簡化咱們的編程;ide

參考資料:

《Java8函數式編程》

  文章首發地址:Solinx
  http://www.solinx.co/archives/382函數式編程

相關文章
相關標籤/搜索