Java——Lambda表示式
阿新 • • 發佈:2018-12-20
一、Lambda表示式——函數語言程式設計
Lambda是JDK1.8推出的重要新特性。很多開發語言都開始支援函數語言程式設計,其中最具備代表性的就是haskell。
傳統面向物件開發
interface IMyInterface{ void print(); } class myClass implements IMyInterface{ @Override public void print() { System.out.println("Hello World"); } } public class Test { public static void main(String[] args) { IMyInterface iMyInterface = new myClass(); iMyInterface.print(); } }
當然上面的操作我們可以用匿名內部類來完成
interface IMyInterface{ void print(); } public class Test { public static void main(String[] args) { IMyInterface iMyInterface = new IMyInterface() { @Override public void print() { System.out.println("Hello World"); } }; iMyInterface.print(); } }
對於此類操作有了更簡化實現,如果採用函數語言程式設計,則程式碼如下:
@FunctionalInterface
interface IMyInterface{
void print();
}
public class Test {
public static void main(String[] args) {
IMyInterface iMyInterface = ()->System.out.println("Hello World");
iMyInterface.print();
}
}
面向物件語法最大的侷限:結構必須非常完整。
要想使用函數語言程式設計有一個前提:介面必須只有一個方法,如果有兩個方法,則無法使用函數語言程式設計。如果現在某個介面就是為了函數語言程式設計而生的,最好在定義時就讓其只能夠定義一個方法,所以有了一個新的註解:@FunctionalInterface,檢查此介面是否只有一個方法。
Lambda表示式語法:
1.
單行無返回值
()-> 語句;
2.
單行有返回值;
()-> 返回值;不用寫return
3.
多行無返回值
()->{
語句
};
4.
多行有返回值
()->{
語句
return 返回值;
};
@FunctionalInterface
interface IMyInterface{
int print(int x,int y);
}
class Test{
public static void main(String[] args) {
//單行有返回值,不用寫return
IMyInterface iMyInterface = (x,y)-> x * y;
System.out.println(iMyInterface.print(2,3));
}
}
@FunctionalInterface
interface IMyInterface{
int print(int x,int y);
}
class Test{
public static void main(String[] args) {
//多行有返回值,需要寫{}和return
IMyInterface iMyInterface = (x,y)-> {
x = x + y;
y = x - y;
x = x - y;
return x - y;
};
System.out.println(iMyInterface.print(2,3));
}
}