java 8新特性學習之二:Java 8 lambda表示式初步第二回
塊lambda表示式
上節列子中顯示的lambda體只包含單個表示式。這種型別的lambda體被稱為表示式體,具有表示式體的lambda表示式有時候被稱為表示式lambda。儘管表示式lambda十分有用,但是有時候會要求使用一個以上的表示式。為了處理這類情況,Java支援另外一種型別的lambda表示式,其中操作符右側的程式碼可以由一個程式碼塊構成,其中可以包含多條語句。這種型別的lambda體被稱為塊體。具有塊體的lambda表示式有時候被稱為塊lambda。
塊lambda擴充套件了lambda表示式內部可以處理的操作型別,因為它允許lambda體包含多條語句。建立塊lambda很容易,只需要使用花括號包圍lambda體,就像建立其他語句塊一樣。
除了允許多條語句,塊lambda的使用方法與剛才討論過的表示式lambda十分類似。但是,也有一個重要區別:在塊lambda中必須顯式使用return語句來返回值。必須這麼做,因為塊lambda體代表的不是單獨一個表示式。
//下邊這個例子實現了一個int型別值的階乘:
interface NumericFunc{
int func(int n);
}
class BlockambdaDemo{
public static void main(String args[]){
NumericFunc factorial = (n)->{
int result = 1;
for(int i=1;i<=n;i++){
result = i*result;
}
return result;
};
System.out.println("The factoral of 3 is "+factorial.func(3));
System.out.println("The factoral of 5 is "+factorial.func(5));
}
}
輸出如下所示:
The factorial of 3 is 6
The factorial of 5 is 120
塊lambda體在本質上與方法體類似。別外一點:當lambda表示式中出現return語句時,只是從lambda體返回,而不會導致包圍lambda體的方法返回。
//使用lambda顛倒一個字串。
interface StringFunc{
String func(String n);
}
class BlocklambdaDemo2{
public static void main(String args[]){
StringFunc reverse = (str)->{
String result = "";
int i;
for(i = str.length()-1;i>=0;i--){
result += str.charAt(i);
}
return result;
};
System.out.println("lambda reversed is "+reverse.func("lambda"));
System.out.println("Expression reversed is "+reverse.func("Expression"));
}
}
輸出如下所示:
lambda reversed is adbmal
Expression reversed is noisserpxE
在這個例子中,函式式介面StringFunc宣告瞭func()方法。該方法接受一個String型別的引數,並返回一個String型別的結果。因此,在reverse lambda表示式中,推斷出str的型別為String。注意,對str呼叫了charAt()方法。之所以能夠這麼呼叫,是因為推斷出了str的型別是String。
相關文章
- java 8新特性學習之五:Java 8 lambda表示式初步第五回Java
- java 8新特性學習之四:Java 8 lambda表示式初步第四回Java
- java 8新特性學習之三:Java 8 lambda表示式初步第三回Java
- Java 8新特性學習之一:Java 8 lambda表示式初步第六回Java
- Java 8新特性學習之一:Java 8 lambda表示式初步第一回Java
- Java 8新特性(一):Lambda表示式Java
- Java8新特性(1):Lambda表示式Java
- Java8新特性(一)-Lambda表示式Java
- java8 新特性之Lambda 表示式Java
- Java8 新特性之 Lambda 表示式Java
- java8特性-lambda表示式Java
- java8新特性之lambda表示式(一)Java
- Java 8 流特性和 Lambda 表示式Java
- Java8新特性第1章(Lambda表示式)Java
- [轉]Java 8 的 lambda 表示式 Java 8 的 lambda 表示式Java
- java8學習:lambda表示式(2)Java
- java8學習:lambda表示式(1)Java
- Java8新特性——從Lambda表示式到Stream流Java
- Java 8新特性:lambda表示式(四)轉載總結Java
- Java 8 Lambda 表示式Java
- java 8 lambda表示式Java
- Java 8 Lambda 表示式學習心得總結Java
- java8的新特性之lambda表示式和方法引用Java
- Java8新特性 - LambdaJava
- Java8-Lambda表示式Java
- java8 lambda表示式Java
- 掌握 Java 8 Lambda 表示式Java
- Java8新特性系列-LambdaJava
- Java8新特性系列(Lambda)Java
- Java8 新語法習慣 (級聯 lambda 表示式)Java
- Java8的Lambda表示式Java
- Java 8 中的 lambda 表示式Java
- 深入探索 Java 8 Lambda 表示式Java
- 深圳Java培訓學習:Java8.0新特性之Lambda表示式Java
- 好程式設計師分享java8新特性之Lambda表示式程式設計師Java
- 【java8新特性】蘭姆達表示式Java
- Java8特性詳解 lambda表示式(一):使用篇Java
- java8新特性學習Java