1. 程式人生 > >lambda與函式式——響應式Spring的道法術器

lambda與函式式——響應式Spring的道法術器

https://blog.csdn.net/jinzhencs/article/details/50748202

https://blog.csdn.net/get_set/article/details/79480121

 

Lambda語法詳解
我們在此抽象一下lambda表示式的一般語法:

1
(Type1 param1, Type2 param2, ..., TypeN paramN) -> {
2
  statment1;
3
  statment2;
4
  //.............
5
  return statmentM;
6
}
從lambda表示式的一般語法可以看出來,還是挺符合上面給出的非精確版本的定義–“一段帶有輸入引數的可執行語句塊”。

上面的lambda表示式語法可以認為是最全的版本,寫起來還是稍稍有些繁瑣。彆著急,下面陸續介紹一下lambda表示式的各種簡化版:

1. 引數型別省略–絕大多數情況,編譯器都可以從上下文環境中推斷出lambda表示式的引數型別。這樣lambda表示式就變成了:

1
(param1,param2, ..., paramN) -> {
2
  statment1;
3
  statment2;
4
  //.............
5
  return statmentM;
6
}
所以我們最開始的例子就變成了(省略了List的建立):

1
List<String> lowercaseNames = names.stream().map((name) -> {return name.toLowerCase();}).collect(Collectors.toList());
2. 當lambda表示式的引數個數只有一個,可以省略小括號。lambda表示式簡寫為:

1
param1 -> {
2
  statment1;
3
  statment2;
4
  //.............
5
  return statmentM;
6
}
所以最開始的例子再次簡化為:

1
List<String> lowercaseNames = names.stream().map(name -> {return name.toLowerCase();}).collect(Collectors.toList());
3. 當lambda表示式只包含一條語句時,可以省略大括號、return和語句結尾的分號。lambda表示式簡化為:

1
param1 -> statment
所以最開始的例子再次簡化為:

1
List<String> lowercaseNames = names.stream().map(name -> name.toLowerCase()).collect(Collectors.toList());
4. 使用Method Reference(具體語法後面介紹)

1
//注意,這段程式碼在Idea 13.0.2中顯示有錯誤,但是可以正常執行
2
List<String> lowercaseNames = names.stream().map(String::toLowerCase).collect(Collectors.toList());