1. 程式人生 > >java8--lambda表示式

java8--lambda表示式

java8中lambda表示式,類似c#中 lambda表示式,ES6中的箭頭函式 。

 

定義:

若java 介面中只有一個抽象方法,我們new 這個介面的例項時需要實現這個唯一的抽象方法,除此之外我們還可以使用一種新的表達方式來new這個介面的例項物件,這就是lambda表示式。這就是說,對於任何只有一個抽象方法的介面,都可以採用lambda的方式產生這個介面的例項物件。

 

示例 :

例如,我們有一個MathOP介面,裡面只有一個唯一的抽象方法。


interface  MathOP{
 int op(int a ,int b);
}


new這個介面的例項物件時,就可以採用lambda的方式,如:

 MathOP  add =(a,b)-> {return a+b;};//加法

MathOP  sub =(a,b)-> a-b;//減法  
MathOP  multiply =(a,b)-> a*b;//乘法
MathOP  divide =(a,b)-> a/b;//除法

 System.out.println(add.op(4, 5));
 System.out.println(sub.op(4, 5));
 System.out.println(multiply.op(4, 5));
 System.out.println(divide.op(11, 5));

新定義個方法,傳入MathOP 型別的引數 

public static  int  myoperate(MathOP  mathOP  ,int a, int b) {
  return mathOP.op(a, b);
}

 System.out.println(myoperate(multiply,3,10));//呼叫myoperate方法

lambda語法:

  (引數列表)->{方法體}     如 (a,b)->{return a+b;};

1、當引數列表中只有一個引數時,可省略小括號 如 a->{return a+b;};  

2、當引數列表中沒有引數,則需要保留一個空的小括號  如()->{System.out.println("hello");};

3、當引數列表中含有多個引數時,小括號必須保留,且引數列表中每一個引數都應提供, 如 (a,b)->{return a+b;};

4、引數列表中的每個引數的java型別是可選的,如 (String a)->{return a+b;}; 可省略引數型別String 為 (a)->{return a+b;}; 

5、如果方法體中有多條語句,則必須用{}括起來,且{}中的每條語句必須以分號結尾。如果方法體中只有一條語句,

     則可省略{},且無需新增return以返回資料(隱式的return 了) ,如 a-> a*2