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