国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Java8和Scala中的Lambda表達式

開發 后端
Java8 終于要支持Lambda表達式!自2009年以來Lambda表達式已經在Lambda項目中被支持。在那時候,Lambda表達式仍被稱為Java閉包。在我們進入一些代碼示例以前,先來解釋下為什么Lambda表達式在Java程序員中廣受歡迎。

Java8 終于要支持Lambda表達式!自2009年以來Lambda表達式已經在Lambda項目中被支持。在那時候,Lambda表達式仍被稱為Java閉包。在我們進入一些代碼示例以前,先來解釋下為什么Lambda表達式在Java程序員中廣受歡迎。

1、為什么使用Lambda表達式

Lambda表達式通常使用在圖形用戶界面(GUI)的開發中。一般來說,GUI編程將程序行為和事件做連接。比如,當用戶按下一個按鈕(觸發一個事件),你的程序就需要去執行某些行為,可能是將一些數據儲存到一個數據存儲器中。在Swing中,可以使用ActionListener來實現:

  1. class ButtonHandler implements ActionListener {  
  2.     public void actionPerformed(ActionEvent e) {  
  3.         //do something  
  4.     }  
  5. }  
  6.  
  7. class UIBuilder {  
  8.     public UIBuilder() {  
  9.         button.addActionListener(new ButtonHandler());  
  10.     }  

這個例子表明了 ButtonHandler 類作為一個回調替換的用法。在這里 ButtonHandler 類僅包含 ActionListener 接口定義的 actionPerformed 方法。我們可以使用匿名內部類來簡化代碼:

  1. class UIBuilder {  
  2.     public UIBuilder() {  
  3.         button.addActionListener(new ActionListener() {  
  4.             public void actionPerformed(ActionEvent event) {  
  5.                 //do something  
  6.             }  
  7.         })  
  8.     }  

這樣代碼簡潔多了。更仔細的去看代碼時,就會發現我們還創建一個只生成一個實例的類,而這個實例也僅僅持有一個獨立的方法。這恰好是Lambda表達式所能解決的其中一類問題。

2、Lambda表達式代替函數

一個lambda表達式從字面上講就是一個函數。它定義了一個函數的輸入參數和函數體。Java 8 中的,lambda表達式語法尚未確定,不過大致應該類似這個樣子的:

  1. (type parameter) -> function_body 

一個具體的例子:

  1. (String s1, String s2) -> s1.length() - s2.length(); 

這個lambda表達式用來計算兩個字符串的長度差。還有一些擴展的語法,比如避免參數的類型定義(我們馬上見看到例子)還有使用{和}來支持多行定義。

Collections.sort() 方法是lambda表達的理想例子。它允許我們將字符串按照長度排序:

  1. List<String> list = Array.asList("loooooong""short""tiny");  
  2. Collections.sort(list, (String s1, String s2) -> s1.length() - s2.length());  
  3. "tiny""short""loooooong"

所以,不像現在java必須要求的向sort方法輸入一個已經實現的Comparator(比較器)而是傳送一個lambda表達式我們就可以得到相同的結果。

3、Lambda表達式代替閉包

lambda表達式有許多有趣的特性。其中之一是,它們是閉包。一個閉包允許函數訪問直接詞法作用域之外的變量。

  1. String outer = "java 8" 
  2. (String s1) -> s1.length() - outer.length() 

在例子中,lambda表達式訪問了字符串 outer 這個作用域之外定義的變量。對于內聯閉包來說這是很難做到的。

4、Lambda表達式也支持類型推論

類型推論是java 7 引入的但它同樣適用于lambda表達式。簡單來說,類型推論意味著程序員可以在任意一個編譯器能夠自動推斷出類型的地方省略類型定義。如果類型推論能夠應用到前面的排序lambda表達式上,那么它就能寫成下面的樣子:

  1. List<String> list = Arrays.asList(...);  
  2. Collections.sort(list, (s1, s2) -> s1.length()-s2.length()); 

就像你所見到的一樣,參數s1和s2的類型被省略了。因為編譯器知道list是一個字符串集合,它知道被用來作為比較器的lambda表達式必定是相同的類型。因此,這個類型不需要顯式地聲明,即使你有這么做的自由。

類型推論的主要優勢就是減少樣板代碼,如果編譯器可以為我們識別類型,為什么我們必須自己定義它們。

5、珍愛Lambda表達式,遠離匿名內部類

我們來體會下,為何lambda表達式和類型推論有助于簡化我們前面所提到的回調例子:

  1. class UIBuilder {  
  2.     public UIBuilder() {  
  3.         button.addActionListener(e -> //process ActionEvent e)  
  4.     }  

我們下載直接傳送一個lambda表達式進入 addActionListener 方法來代替前面定義的持有回調方法的類。除了減少模板代碼和提高可讀性以外,它使我們直接表達我們***感興趣的事情:處理事件。

在我們了解lambda表達式更多優勢之前,先來看看在Scala中的lambda表達式副本。

6、Scala中的Lambda表達式

在函數式編程中,函數是基本的構造塊。Scala融合了java中的面向對象編程和函數式編程。在Scala中,一個lambda表達式是種叫做“函數”或者“函數文本”。Scala中的函數屬于一等公民。它們可以被分配給vals或者vars(最終變量或者非最終變量),它們可以作為其他函數的參數,也可以組合成新的函數。

在Scala中一個函數文本寫成如下形式:

  1. (argument) => //funtion body 

舉例來說,前面提到的java 用來計算兩個字符串長度差的 lambda 表達式,在Scala中寫作如下:

  1. (s1: String, s2 :String) => s1.length - s2.length 

Scala中的函數文本也是閉包。它可以訪問在直接詞法作用域之外定義的變量。

  1. val outer =10 
  2. val myFuncLiteral = (y: Int) => y * outer  
  3. val result = myFuncLiteral(2)  
  4. 20 

這個例子結果是20.

正如你所見,我們將函數文本分配給了變量 myFuncLiteral。

java 8 的lambda表達式和Scala的函數文本在語法和語義上的相似性是十分明顯的。從語義上講它們是相同的,而語法上的***不同就是箭頭符號(java8 ->, scala =>)和我們沒有提到的簡化符號。

英文原文:http://www.infoq.com/articles/java-8-vs-scala

本文地址:http://my.oschina.net/atttx123/blog/66425

責任編輯:林師授 來源: 散裝海盜的博客
相關推薦

2012-06-26 10:03:58

JavaJava 8lambda

2009-07-21 14:03:00

Scalaif表達式while循環

2013-04-07 15:44:26

Java8Lambda

2020-10-16 10:07:03

Lambda表達式Java8

2013-04-07 10:04:03

Java8Lambda

2024-03-25 13:46:12

C#Lambda編程

2015-08-04 09:16:20

JavaLambda表達式

2009-09-17 09:09:50

Lambda表達式Linq查詢

2009-07-21 14:38:08

Scalamatch表達式break和conti

2009-07-09 09:51:07

Lambda表達式C#

2009-09-11 09:48:27

Linq Lambda

2024-03-12 08:23:54

JavaLambda函數式編程

2013-01-05 02:19:50

JavaLambda表達式JVM

2009-09-15 15:18:00

Linq Lambda

2009-09-09 13:01:33

LINQ Lambda

2022-12-05 09:31:51

接口lambda表達式

2009-08-10 17:11:34

.NET 3.5擴展方Lambda表達式

2009-07-01 09:56:10

C#3.0

2022-09-19 14:12:27

C++Lambda表達式

2009-07-21 14:16:18

Scalafor表達式
點贊
收藏

51CTO技術棧公眾號

国产欧美日韩综合精品一区二区 | 欧美主播一区二区三区美女| 久久精品.com| 91热门视频在线观看| 国产3p露脸普通话对白| 成人国产免费视频| 欧美亚洲国产成人| 国产欧美日韩综合| 免费在线黄网| 欧美性生交xxxxxdddd| av男人的天堂在线| 精品捆绑美女sm三区| 不卡一二三区| www.欧美精品| 青青久久av| 国产日韩欧美一二三区| 亚洲国内自拍| 性做爰过程免费播放| 成人18精品视频| 国产精品一区二区羞羞答答| 亚洲欧美色一区| 蜜桃视频在线观看网站| 亚洲成年人在线播放| 成人免费一区| 欧美亚洲成人免费| 欧美全黄视频| 懂色av粉嫩av蜜臀av| 久久久久成人黄色影片| 丝袜美女写真福利视频| 91久久精品一区二区| 金瓶狂野欧美性猛交xxxx | 久久综合久久综合久久综合| 羞羞的视频网站| 欧美日韩裸体免费视频| 超碰在线观看免费| 久久国产精品电影| 香蕉av一区二区| 一区二区三区四区免费观看| 中文字幕免费不卡| 在线免费av电影| 日韩一级黄色av| 91影院成人| 国产精品一区在线免费观看| 综合电影一区二区三区| 天天影视久久综合| 久久亚洲精品网站| 欧美一区免费| 国产91xxx| 色哟哟精品一区| 影音成人av| 亚洲综合在线做性| 成人av影院在线| 久久精品蜜桃| 久久伊人免费视频| 国产欧美日韩综合一区在线播放| www精品久久| 欧美特级限制片免费在线观看| 九色成人搞黄网站| 亚洲影院在线看| 久久久久久97三级| 中日韩高清电影网| 日本最新高清不卡中文字幕| 六月丁香婷婷久久| 国外男同性恋在线看| 国产亚洲欧美日韩一区二区| 99久久影视| 欧美成人xxxxx| 91精品国产一区二区人妖| 成人h动漫免费观看网站| 日韩久久精品一区二区三区| 亚洲精品成人少妇| 日本综合视频| 麻豆精品蜜桃一区二区三区| 国产精品视频在线看| 在线观看特色大片免费视频| 99高清视频有精品视频| 中文字幕永久在线不卡| 日韩免费小视频| 欧美亚州在线观看| 精品久久久久久久久久国产| 欧美9999| 日韩a级黄色片| 日韩一区二区三区高清免费看看| 精品久久久久久久| 日本一本二本在线观看| 亚洲国产欧美一区| 99久久夜色精品国产亚洲96| 午夜电影福利网| 久久久精品欧美| 国产精品资源在线观看| 菠萝蜜视频国产在线播放| 成人免费福利在线| 亚洲男同1069视频| 91精品丝袜国产高跟在线| 日韩中文在线字幕| 欧美成人欧美edvon| 亚洲三级视频| 黄网站在线观看| 国产精品美女免费视频| 亚洲人吸女人奶水| 一区二区日韩| 久草资源站在线观看| 一本色道久久综合狠狠躁篇怎么玩| 首页欧美精品中文字幕| 黄色免费在线看| 国产综合欧美在线看| 色伊人久久综合中文字幕| 人人狠狠综合久久亚洲婷| 丁香激情视频| 91超碰caoporn97人人| 国产欧美日韩在线看| 日本一区二区三区播放| 亚洲不卡中文字幕无码| 中日韩午夜理伦电影免费| 国产成人精品www牛牛影视| 自拍偷拍欧美视频| 国内自拍中文字幕| 在线播放亚洲激情| proumb性欧美在线观看| av在线免费观看网址| 视频一区视频二区视频| 亚洲精品久久久久久久久久久久| 美女视频网站黄色亚洲| 亚洲欧美se| 男女超爽视频免费播放| 久久天天躁夜夜躁狠狠躁2022| 久久嫩草精品久久久久| 超碰在线亚洲| 日本夜爽爽一二区| 91久久精品美女高潮| 欧洲激情一区二区| 午夜一区二区三区不卡视频| 日韩专区av| 国产精品成人久久电影| 久久久久久久久久久久久久久久久久av | 美女久久网站| 91麻豆免费在线视频| 亚洲.欧美.日本.国产综合在线| 亚洲国模精品私拍| 成人自拍视频在线| 国产精品三p一区二区| 全网国产福利在线播放| 亚洲a一级视频| 欧美tickling挠脚心丨vk| 国产成人av一区二区三区在线| 国产精品久久久久久av公交车| 人人澡人一摸人人添| 95av在线视频| 欧美精品一区二区三区高清aⅴ| 成人免费的视频| 亚洲黄页在线观看| 888av在线| 国产va亚洲va在线va| 亚州国产精品久久久| 色综合久久99| 国产一区在线不卡| 精品三级av| 天堂中文а√在线| 国产在线播放观看| 国产精品无av码在线观看| 91精品国产综合久久精品麻豆 | 亚洲国产精品一区二区第一页| 一本色道久久综合狠狠躁篇的优点 | 99在线观看视频| 日韩精品免费在线| 国产精品成人一区二区艾草 | 国产精品久久亚洲7777| 精品无人区乱码1区2区3区在线| 欧美极品aⅴ影院| 伊人久久大香线蕉综合热线| 少妇精品视频一区二区免费看| 91p在线观看| 亚洲mv在线看| 日本三级韩国三级久久| 精品久久久久一区| 亚洲欧洲色图综合| 免费亚洲视频| 久久99国产精品久久99大师 | 国产成人高清| 欧美大胆的人体xxxx| 黄色成人免费观看| 欧美亚洲另类在线一区二区三区| 久久这里只有精品视频首页| 欧美亚洲一区二区在线观看| 99re66热这里只有精品3直播 | 91综合免费在线| 亚洲精品资源在线| 一区二区三区日韩欧美精品| 日韩黄色一级片| 中文字幕中文字幕精品| 久操av在线| 22288色视频在线观看| 丰满人妻一区二区三区53号| 91在线视频一区| 欧美黄色性视频| 亚洲激情在线观看| 色先锋aa成人| 91女神在线视频| 美女网站视频久久| 国产精品vip|