




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第六部分JDK8及以后版本特性總結(jié)第26章Lambda表達(dá)式Lambda表達(dá)式的基本語法Lambda表達(dá)式可以理解為傳遞匿名函數(shù)的一種方式,它沒有名稱,但是有參數(shù)列表、函數(shù)主體、返回類型,可能還有一個(gè)可以拋出的異常列表。Lambda表達(dá)式解決了使用匿名方法的麻煩,并且給予Java簡潔而強(qiáng)大的函數(shù)化編程能力。以下是Lambda表達(dá)式的重要特征。 可選的類型聲明:參數(shù)類型可省略,編譯器可以統(tǒng)一識(shí)別參數(shù)值。 可選的參數(shù)圓括號(hào):有一個(gè)參數(shù)時(shí)可省略圓括號(hào),但有多個(gè)參數(shù)時(shí)需要定義圓括號(hào)。 可選的主體花括號(hào):主體只包含一個(gè)語句時(shí)可省略花括號(hào)。 可選的返回關(guān)鍵字:只有一行代碼時(shí)可以省略return語句。函數(shù)式接口函數(shù)式接口可以被隱式轉(zhuǎn)換為Lambda表達(dá)式,函數(shù)式接口有如下幾個(gè)特征: 接口中只能有一個(gè)接口方法,可以有多個(gè)非抽象方法; 可以有靜態(tài)方法和默認(rèn)方法; 可以使用@FunctionalInterface標(biāo)記; 默認(rèn)方法可以被覆寫。第26章Lambda表達(dá)式變量作用域Lambda表達(dá)式可以沒有限制地捕獲實(shí)例變量和靜態(tài)變量,但只能引用標(biāo)記了final的外層局部變量,即不能在Lambda表達(dá)式內(nèi)部修改定義在域外的局部變量,否則會(huì)出現(xiàn)編譯錯(cuò)誤。因?yàn)長ambda表達(dá)式可能在另一個(gè)線程中運(yùn)行,而局部變量是在棧上的,Lambda表達(dá)式作為額外的線程會(huì)生成一份變量副本。這樣可能會(huì)出現(xiàn)同步問題,因?yàn)橹骶€程的局部變量或許已經(jīng)被回收。實(shí)例變量存儲(chǔ)于堆中,堆是共享的,靜態(tài)變量也是共享的。方法引用方法引用可以使開發(fā)者直接引用構(gòu)造方法、靜態(tài)方法、實(shí)例方法或?qū)嵗龑?duì)象。方法引用和Lambda表達(dá)式配合使用,可以讓代碼看起來更加簡潔,沒有很多復(fù)雜的模板代碼。第26章Lambda表達(dá)式Stream概述Stream是一個(gè)來自數(shù)據(jù)源的元素隊(duì)列,支持聚合操作,允許以聲明的方式處理數(shù)據(jù)集合。StreamAPI把真正的函數(shù)式編程風(fēng)格引入Java中。Stream將要處理的元素集合看成一種流,元素是特定類型的對(duì)象,形成一個(gè)隊(duì)列。在處理流的過程中,借助StreamAPI對(duì)Stream中的元素進(jìn)行操作,如篩選、排序、聚合等。Stream包含數(shù)據(jù)源和聚合操作兩個(gè)部分。(1)數(shù)據(jù)源:流的來源,可以是集合、數(shù)組、I/Ochannel、產(chǎn)生器(generator)等。(2)聚合操作:類似SQL語句的操作,如filter、map、reduce、find、match、sorted等。對(duì)Stream的操作分為兩種。(1)中間操作:每次返回一個(gè)新的流,可以有多個(gè)。(2)終端操作:每個(gè)流只能進(jìn)行一次終端操作,終端操作可視為關(guān)閉流的操作,操作結(jié)束后流無法再次使用。終端操作會(huì)產(chǎn)生一個(gè)新的集合或值。Stream的特性如下。(1)集合側(cè)重的是數(shù)據(jù),流側(cè)重的則是計(jì)算。Stream不存儲(chǔ)數(shù)據(jù),而是按需計(jì)算,按照特定的規(guī)則對(duì)數(shù)據(jù)進(jìn)行計(jì)算,一般會(huì)輸出結(jié)果。(2)Stream不會(huì)改變數(shù)據(jù)源,會(huì)返回一個(gè)持有結(jié)果的新Stream。(3)Stream具有延遲執(zhí)行特性,只有調(diào)用終端操作時(shí),中間操作才會(huì)執(zhí)行。(4)以前對(duì)集合進(jìn)行遍歷都是通過迭代器Iterator或for循環(huán)的方式,顯式地在集合外部進(jìn)行迭代,稱為外部迭代。Stream提供了內(nèi)部迭代的方式,通過訪問者模式(Visitor)實(shí)現(xiàn)。流的使用可以總結(jié)為如下內(nèi)容。(1)一個(gè)數(shù)據(jù)源(集合等)執(zhí)行一個(gè)查詢。(2)一個(gè)中間操作鏈形成一條流的流水線。(3)一個(gè)終端操作執(zhí)行流水線,并生成結(jié)果。第27章Stream創(chuàng)建StreamStream可以通過集合、數(shù)組等來創(chuàng)建。通過集合創(chuàng)建流2.通過數(shù)組創(chuàng)建流3.通過Stream靜態(tài)方法of()、iterate()、generate()創(chuàng)建流Stream的中間操作多個(gè)中間操作可以連接起來形成一個(gè)流水線,中間操作不會(huì)執(zhí)行任何的處理,直到流水線上觸發(fā)終端操作,并且在終端操作時(shí)一次性全部處理,因此該過程稱為“惰性求值”。常用的StreamAPI如下。1.篩選與切片2.映射3.排序Stream的終端操作終端操作會(huì)從流的流水線中生成結(jié)果,該結(jié)果可以是任何不是流的值,如List、Integer、void等。一個(gè)常見的數(shù)據(jù)處理方式就是查看數(shù)據(jù)集中的某些元素是否匹配一個(gè)給定的屬性。StreamAPI通過一系列方法提供了便利的實(shí)現(xiàn)途徑。1.查找與匹配2.歸約3.收集第27章Stream串行流與并行流串行流:stream,由主線程按順序?qū)α鲌?zhí)行操作。并行流:parallelStream,將一個(gè)內(nèi)容分成多個(gè)數(shù)據(jù)塊,并用不同的線程分別處理每個(gè)數(shù)據(jù)塊的流。前提是流中的數(shù)據(jù)處理沒有順序要求。第27章StreamOptional類入門Optional類是一個(gè)可以為null的容器對(duì)象,它可以保存類型為T的值,或者僅僅保存null。Optional提供很多有用的方法,這樣就不用顯式進(jìn)行空值檢測(cè)。如果值存在,則isPresent()方法會(huì)返回true,調(diào)用get()方法會(huì)返回該對(duì)象。Optional類的引入很好地解決了空指針異常問題。第28章Optional類創(chuàng)建Optional對(duì)象第28章Optional類獲取Optional中的值獲取Optional中的值的方法有以下兩種。使用map從Optional對(duì)象中提取和轉(zhuǎn)換值從對(duì)象中提取信息是一種常見的模式。在沒有使用Optional時(shí),需要先檢查對(duì)象是否為null,再調(diào)用獲取方法。否則會(huì)報(bào)空指針異常。2.使用flatMap鏈接Optional對(duì)象如果需要獲取多級(jí)嵌套對(duì)象中最里層對(duì)象的屬性,如獲取班級(jí)中某個(gè)學(xué)生的學(xué)科成績,在沒有使用Optional時(shí),需要多個(gè)if語句檢查對(duì)象是否為空。第28章Optional類更新的日期和時(shí)間API概述Java曾三次引入處理時(shí)間的API,JDK1.0版本對(duì)日期和時(shí)間的支持只能依賴java.util.Date類,這個(gè)類如類名所表達(dá)的,無法表示日期,只能以毫秒的精度表示時(shí)間,且其易用性很差。Date類的大多數(shù)方法在Java1.1版本引入java.util.Calendar類之后被棄用。但是Calendar類也有類似的問題和設(shè)計(jì)缺陷。它的實(shí)例都是可變的,而且它的API很難使用,甚至月份從0開始;同時(shí)存在Date和Calendar兩個(gè)類,容易造成混亂。Java8引入了java.timeAPI之后糾正了之前的問題,且已經(jīng)完全實(shí)現(xiàn)了JSR-310規(guī)范。第29章日期和時(shí)間API包描
述java.time包更新的Java日期和時(shí)間API的基礎(chǔ)包,所有的基礎(chǔ)類都是這個(gè)包的一部分,如LocalDate、LocalTime、LocalDateTime、Instant、Period、Duration等。所有這些類都是不可變的和線程安全的,在絕大多數(shù)情況下,這些類能夠有效地處理一些公共的需求java.time.chrono包為非ISO的日歷系統(tǒng)定義了一些泛化的API,可以通過擴(kuò)展AbstractChronology類來創(chuàng)建自己的日歷系統(tǒng)java.time.format包包含能夠格式化與解析日期和時(shí)間對(duì)象的類,絕大多數(shù)情況下,不應(yīng)該直接使用它們,因?yàn)閖ava.time包中相應(yīng)的類已經(jīng)提供了格式化與解析的方法java.time.temporal包包含一些時(shí)態(tài)對(duì)象,可以用其找出關(guān)于日期和時(shí)間對(duì)象的某個(gè)特定日期或時(shí)間,比如,可以找到某月的第一天或最后一天。命名格式為“withXxx”,因此可以非常容易地認(rèn)出這些方法java.time.zone包包含支持不同時(shí)區(qū)及相關(guān)規(guī)則的類本地化日期和時(shí)間APIjava.time包中提供了LocalDate、LocalTime、LocalDateTime、Instant、Duration和Period類來支持創(chuàng)建簡單的日期和時(shí)間間隔。LocalDate、LocalTime和LocalDateTime類可以處理時(shí)區(qū)不必需的情況。1.LocalDate開始使用更新的日期和時(shí)間API時(shí),最先碰到的可能是LocalDate類。LocalDate類是一個(gè)不可變的類,該類的實(shí)例是一個(gè)不可變的對(duì)象,它只提供了簡單的日期,并不含當(dāng)天的時(shí)間信息,也不附帶任何與時(shí)區(qū)相關(guān)的信息。它表示默認(rèn)格式(yyyy-MM-dd)的日期。2.LocalTime同樣,一天中的時(shí)間,如12:20:42,也可以用LocalTime類表示。LocalTime是一個(gè)不可變的類,它的實(shí)例代表一個(gè)常規(guī)可讀格式的時(shí)間,默認(rèn)格式為hh:mm:ss.zzz。與LocalDate類一樣,該類也提供了時(shí)區(qū)支持,也可以傳入小時(shí)、分鐘和秒等輸入?yún)?shù)創(chuàng)建實(shí)例。3.LocalDateTimeLocalDateTime是一個(gè)不可變的日期和時(shí)間對(duì)象,它表示一組日期和時(shí)間,即LocalDate和LocalTime的合體,但不帶有時(shí)區(qū)信息。默認(rèn)格式是yyyy-MM-dd-HH-mm-ss.zzz??梢灾苯觿?chuàng)建對(duì)象,也可以通過合并日期和時(shí)間對(duì)象構(gòu)造。4.Instant人們習(xí)慣的星期幾、幾號(hào)、幾點(diǎn)、幾分的描述方式,對(duì)計(jì)算機(jī)來說并不容易理解。從計(jì)算機(jī)的角度來看,建模時(shí)間較自然的格式是表示一個(gè)持續(xù)時(shí)間段上某個(gè)點(diǎn)的單一大整數(shù)。這也是更新的java.time.Instant類對(duì)時(shí)間建模的方式,即Instant類是用在機(jī)器可讀的時(shí)間格式上的,它以UNIX時(shí)間戳的形式存儲(chǔ)日期和時(shí)間,基本上以UNIX元年時(shí)間(UTC時(shí)區(qū)1970年1月1日零點(diǎn))開始所經(jīng)歷的秒數(shù)進(jìn)行計(jì)算。所以通常說的時(shí)間戳指的是秒數(shù),而不是毫秒數(shù),這一點(diǎn)容易搞錯(cuò),一定要特別注意。5.DurationDuration類主要用于以秒和納秒衡量時(shí)間的長短,通過Duration可以獲取兩個(gè)Temporal對(duì)象之間的持續(xù)時(shí)間。Duration類提供了between靜態(tài)方法,可以創(chuàng)建兩個(gè)LocalTime對(duì)象、兩個(gè)LocalDateTime或兩個(gè)Instant對(duì)象的持續(xù)時(shí)間。但是不能在LocalDateTime和Instant兩類對(duì)象之間創(chuàng)建duration,否則會(huì)拋出DateTimeException異常。6.PeriodDuration類主要用于以秒和納秒衡量時(shí)間的長短,因此不能僅向between方法傳遞一個(gè)LocalDate對(duì)象參數(shù)。如果需要以年、月、日的方式對(duì)多個(gè)時(shí)間單位建模,可以使用Period類。類中提供靜態(tài)工廠方法between,可以得到兩個(gè)LocalDate之間的時(shí)長。第29章日期和時(shí)間API使用時(shí)區(qū)的日期和時(shí)間API1.處理不同時(shí)區(qū)和日歷系統(tǒng)如果需要考慮到時(shí)區(qū),就可以使用時(shí)區(qū)的日期和時(shí)間API,時(shí)區(qū)的處理是Java8及以后版本日期和時(shí)間API增加的重要功能。java.time.ZoneId類是java.util.TimeZone類的替代品,它提供了獲取所有時(shí)區(qū)和本地時(shí)區(qū)的方法,設(shè)計(jì)目標(biāo)是讓開發(fā)者無須為時(shí)區(qū)處理而操心,簡化對(duì)時(shí)區(qū)的處理。與其他日期和時(shí)間類一樣,ZoneId也是無法修改的??梢允褂渺o態(tài)方法systemDefault()獲取當(dāng)前默認(rèn)的ZoneId。2.利用和UTC/GMT時(shí)間的固定偏差計(jì)算時(shí)區(qū)有時(shí)候,會(huì)通過諸如“東京比北京早1小時(shí)”“紐約晚于倫敦5小時(shí)”等表達(dá)方式來描述時(shí)間。利用當(dāng)前時(shí)區(qū)和UTC/GMT時(shí)間的固定偏差描述時(shí)間,也是表達(dá)時(shí)區(qū)的一種常用方式。此時(shí),可以使用ZoneOffset類,它是ZoneId的一個(gè)子類,表示的是當(dāng)前時(shí)間和格林尼治標(biāo)準(zhǔn)時(shí)的差異。3.使用別的日歷系統(tǒng)Java8及以后版本的日期和時(shí)間API還提供了對(duì)非ISO日歷系統(tǒng)(non-ISOcalendaring)的支持。API提供了幾種其他的日歷系統(tǒng),這些日歷系統(tǒng)中的每個(gè)都有一個(gè)對(duì)應(yīng)的日志類。
ThaiBuddhistDate:泰國日歷。
Ja
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 三農(nóng)經(jīng)濟(jì)統(tǒng)計(jì)分析與研究方案集錦
- 客戶服務(wù)投訴處理表
- 防滲渠道施工方案
- 家裝施工方案范本
- 水電工法展示樣板施工方案
- 挖掘機(jī)打管樁施工方案
- 工廠環(huán)氧地坪工程施工方案
- 初一下人教版數(shù)學(xué)試卷
- 香港動(dòng)力源國際有限公司股東全部權(quán)益價(jià)值資產(chǎn)評(píng)估報(bào)告
- 寧波復(fù)式屋頂花園施工方案
- 2025年安徽中醫(yī)藥高等??茖W(xué)校單招職業(yè)技能考試題庫帶答案
- 小學(xué)二年級(jí)下冊(cè)《勞動(dòng)》教案
- 2025年南京鐵道職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測(cè)試題庫及答案1套
- 2025年江西青年職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年常考版參考題庫含答案解析
- 全套教學(xué)課件《工程倫理學(xué)》
- 初中物理校本教材《物理之窗》內(nèi)容
- 清華大學(xué)考生自述
- 2002版工程勘察設(shè)計(jì)收費(fèi)標(biāo)準(zhǔn)
- 市政燃?xì)夤艿拦こ淌┕ぶ斜O(jiān)理的重點(diǎn)和難度探究
- 聲控?zé)舻脑O(shè)計(jì)(畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)(論文)高效精密大豆播種機(jī)設(shè)計(jì)(含全套CAD圖紙)
評(píng)論
0/150
提交評(píng)論