Java8(上)

Java8中的一些概念和新特性

說到Java8都會說到函數(shù)式編程或者都說提到lamdba表達(dá)式,先具體講個個概念解釋一遍

函數(shù)式編程

  1. 什么是函數(shù)式編程,

  2. 為什么要使用函數(shù)編程說到函數(shù)式編程一般都會提出上面兩個疑問

  3. 什么是函數(shù)式編程厦凤,過去我們的編程習(xí)慣,稱為指令式編程李茫,命令式編程规辱,或是聲明式編程, 這種編程的風(fēng)格非常適合經(jīng)典的面向?qū)ο缶幊蹋?strong>專注于如何實(shí)現(xiàn)疚沐,如下面代碼暂氯,從列表中找到最昂貴的事務(wù)

      if (mostExpensive==null){
    throw new IllegalAccessException("Empty list of transactions"); 
}
 for (Transaction t:transactions.subList(1,transactions.size())){
  if (t.getValue()>mostExpensive.getValue()){ 
     mostExpensive=t;
  }
}```
而函數(shù)式編程的特點(diǎn)在于 更加關(guān)注要做什么,最終實(shí)現(xiàn)的細(xì)節(jié) 留給函數(shù)庫亮蛔,這種思想稱之為內(nèi)部迭代痴施,它的特點(diǎn)在于讓人讀起來像是問題的陳述
``` Optional<Transaction> mostExpensive = transactions.stream().max(Comparator.comparing(Transaction::getValue));```
函數(shù)式編程的定義是什么:**簡單的說是一種使用函數(shù)來進(jìn)行編程的方式**,復(fù)雜的定義:**是將代碼傳遞給方法(同時也能夠返回代碼并將其包含在數(shù)據(jù)結(jié)構(gòu)中)究流,還能讓我們能夠使用一整套新技巧辣吃,稱為函數(shù)式編程**

為什么要使用函數(shù)式編程 他的好處是什么
------------------- 
1. 代碼量少很多
 2. 易于閱讀 
3. 無副作用:副作用指的是:函數(shù)在調(diào):用過程中,除了給出了返回值外芬探,還修改了函數(shù)外部的狀態(tài)神得,函數(shù)的副用作應(yīng)該被盡量避免,這種函數(shù)調(diào)用的副作用偷仿,在函數(shù)式編程里哩簿,需要進(jìn)行有效的限制。
 4. 尾遞歸優(yōu)化:過去遞歸的最大問題在于它總是使用椩途玻空間节榜,現(xiàn)在我們不需要再不同的棧幀上保持每次遞歸計(jì)算的中間數(shù)值,編譯器能夠自行決定服用某一個棧幀進(jìn)行計(jì)算别智。
 5. 易于并行宗苍,內(nèi)部的迭代讓我們可以并行處理一個流,而無需再代碼中顯示使用和協(xié)調(diào)不同的線程薄榛。
 6. 避免了空指針讳窟,通過optional 來取代null 的時候發(fā)生的情況。

 同時java8提供了新的特性和API供我們使用
 1. 對于過去Date和Calendar來處理時間非常非常的不便蛇数,在1.8中引入了LocalDate和LocalTime instant Duration等來方便解決時間日期等問題 
2. 提供行為的多繼承
```public interface Sized{
int size();
default boolean isEmpty(){ 
return size()==0;
}}
如果這個接口有多個實(shí)現(xiàn)類 突然接口多一個方法 實(shí)現(xiàn)類要必須實(shí)現(xiàn)這個方法 會非常不便挪钓,通過defalut 讓改進(jìn)API對象有多實(shí)現(xiàn) 所有就相應(yīng)的出現(xiàn)了多繼承行為的情況```
 Java8的名詞
==
 1. 行為參數(shù)化:面向接口編程的概念相同(個人理解),將相同的行為耳舅,提取出來稱為一個接口碌上。 2. 函數(shù)式接口:只定義一個抽象方法的接口稱為函數(shù)式接口如
 ` @FunctionalInterfacepublic interface Runnable { public abstract void run();}FunctionalInterface 這個注解是來讓編譯器檢查當(dāng)前是否是一個函數(shù)式接口`
函數(shù)描述符:函數(shù)式接口的抽象方法的基本簽名基本上就是lambda表達(dá)式的簽名倚评。我們將這種抽象方法稱為函數(shù)描述符如`(Apple,Apple)->int ` 代表兩個Apple作為參數(shù)傳遞進(jìn)來返回一個int的函數(shù)
 3. 流:定義:從支持?jǐn)?shù)據(jù)處理操作的源生成的元素序列 3. 元素序列:集合和流類似馏予,可以訪問特定元素類型的一組值天梧。但是集合是數(shù)據(jù)結(jié)構(gòu),主要的目的是一特定的時間/空間復(fù)雜度存儲和訪問元素霞丧。但是流的目的在于計(jì)算呢岗。
    4. 源:流會使用一個提供數(shù)據(jù)的源,
    5. 數(shù)據(jù)處理操作蛹尝,常見操作如filter后豫,map reduce find match sort等 
    6. 流水線:很多 流操作本身會返回一個流,多個操作就可以連接起來 
    7. 內(nèi)部迭代突那, 和顯示的迭代不同挫酿,流的迭代是在背后進(jìn)行的。 
3. 收集器:也可以理解為終端操作愕难,它接受參數(shù)是流中的元素累計(jì)到匯總結(jié)果的各種方式早龟。
**在Android Studio 使用lamdba**
```在最外層的 build.gradle dependencies
 {
 classpath 'me.tatarka:gradle-retrolambda:3.2.5' 
} 
在需要的modelu中build.gradle 添加 apply plugin: 'me.tatarka.retrolambda'
在Android 的標(biāo)簽下 加入compileOptions {
 sourceCompatibility JavaVersion.VERSION_1_8
 targetCompatibility JavaVersion.VERSION_1_8 
} 
就可以在Android Studio 中使用lamdba了
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市猫缭,隨后出現(xiàn)的幾起案子葱弟,更是在濱河造成了極大的恐慌,老刑警劉巖猜丹,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芝加,死亡現(xiàn)場離奇詭異,居然都是意外死亡居触,警方通過查閱死者的電腦和手機(jī)妖混,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轮洋,“玉大人制市,你說我怎么就攤上這事”子瑁” “怎么了祥楣?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長汉柒。 經(jīng)常有香客問我误褪,道長,這世上最難降的妖魔是什么碾褂? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任兽间,我火速辦了婚禮,結(jié)果婚禮上正塌,老公的妹妹穿的比我還像新娘嘀略。我一直安慰自己恤溶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布帜羊。 她就那樣靜靜地躺著咒程,像睡著了一般。 火紅的嫁衣襯著肌膚如雪讼育。 梳的紋絲不亂的頭發(fā)上帐姻,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機(jī)與錄音奶段,去河邊找鬼饥瓷。 笑死,一個胖子當(dāng)著我的面吹牛痹籍,可吹牛的內(nèi)容都是我干的扛伍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼词裤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鳖宾?” 一聲冷哼從身側(cè)響起吼砂,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鼎文,沒想到半個月后渔肩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拇惋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年周偎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撑帖。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡蓉坎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胡嘿,到底是詐尸還是另有隱情蛉艾,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布衷敌,位于F島的核電站勿侯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏缴罗。R本人自食惡果不足惜助琐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望面氓。 院中可真熱鬧兵钮,春花似錦蛆橡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屁药,卻和暖如春粥血,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酿箭。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工复亏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缭嫡。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓缔御,卻偏偏與公主長得像,于是被迫代替她去往敵國和親妇蛀。 傳聞我的和親對象是個殘疾皇子耕突,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Java 8的新特性可以幫助你: 1.使用Java 8可以減少冗長的代碼,讓代碼更易于理解 2.通過方法引用和St...
    Phoenix小彬閱讀 953評論 0 2
  • Java8 in action 沒有共享的可變數(shù)據(jù)评架,將方法和函數(shù)即代碼傳遞給其他方法的能力就是我們平常所說的函數(shù)式...
    鐵牛很鐵閱讀 1,233評論 1 2
  • 第一章 為什么要關(guān)心Java 8 使用Stream庫來選擇最佳低級執(zhí)行機(jī)制可以避免使用Synchronized(同...
    謝隨安閱讀 1,493評論 0 4
  • 從三月份找實(shí)習(xí)到現(xiàn)在眷茁,面了一些公司,掛了不少纵诞,但最終還是拿到小米上祈、百度、阿里浙芙、京東登刺、新浪、CVTE嗡呼、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,255評論 11 349
  • 一纸俭、雪的真相 天空一思考 人間就下雪 誰能上天去 叫他不撓頭 二、雪的樣子 物理學(xué)家說 它是雨滴摔碎前 悄悄改了主...
    青舟青舟閱讀 242評論 3 4