Java基礎學習:Java8的新特性

Java基礎學習:Java8的新特性

深圳達內(nèi)教育      2022-04-09 00:35:01     2

Java基礎學習:Java8的新特性,現(xiàn)在很多業(yè)務方還一直停留在1.7版本,遲遲不升級,為了兼容性,不敢在代碼中使用Java8的一些新特性,比如Stream之類的,雖然不能

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細介紹


    現(xiàn)在很多業(yè)務方還一直停留在1.7版本,遲遲不升級,為了兼容性,不敢在代碼中使用Java8的一些新特性,比如Stream之類的,雖然不能用,但還是要學一下。




  Stream是什么


  Stream是Java8中添加的一個新特性,它與java.io包里的InputStream和OutputStream是完全不同的概念。它借助于Lambda表達式,可以讓你以一種聲明的方式處理數(shù)據(jù),可以極大提高Java程序員的生產(chǎn)力,讓程序員寫出高效率、干凈、簡潔的代碼。


  StreamDemo


  直接上Demo,感受一下



  Stream 如何工作


  當使用一個流的時候,通常包括三個基本步驟:


  獲取一個數(shù)據(jù)源(source)


  數(shù)據(jù)轉(zhuǎn)換


  執(zhí)行操作獲取想要的結(jié)果


  每次轉(zhuǎn)換原有 Stream 對象不改變,返回一個新的 Stream 對象(可以有多次轉(zhuǎn)換),這就允許對其操作可以像鏈條一樣排列,變成一個管道,如下圖所示。



  在Stream中,分為兩種操作


  中間操作


  結(jié)束操作


  中間操作返回Stream,終端操作返回void或者非Stream結(jié)果,在demo中, filter、 map、 sorted都算是中間操作,而 forEach是一個結(jié)束操作。


  Stream 如何生成


  創(chuàng)建Stream的方式很多,最常見的是從Collections,List 和 Set中生成

  


  在對象myList上調(diào)用方法 stream() 返回一個常規(guī)對象Stream。

  也可以從一堆已知對象中生成。

  


  當然了,還有其它方式:


  Collection.stream()


  Collection.parallelStream()


  BufferedReader.lines()


  Files.walk()


  BitSet.stream()


  Random.ints()


  JarFile.stream()


  ....


  常規(guī)操作


  forEach


  forEach方法接收一個 Lambda 表達式,用來迭代流中的每個數(shù)據(jù)

  


  map


  map 用于映射每個元素到對應的結(jié)果

  


  filter


  filter 用于通過設置的條件過濾出元素

  


  limit


  limit 用于用于獲取指定數(shù)量的流

  


  sorted


  sorted 用于對流進行排序

  


  Match


  有三個 match 方法,從語義上說:


  allMatch:Stream 中全部元素符合傳入的 predicate,返回 true


  anyMatch:Stream 中只要有一個元素符合傳入的 predicate,返回 true


  noneMatch:Stream 中沒有一個元素符合傳入的 predicate,返回 true


  它們都不是要遍歷全部元素才能返回結(jié)果。例如 allMatch 只要一個元素不滿足條件,就 skip 剩下的所有元素,返回 false。

  


  reduce


  reduce 方法根據(jù)指定的函數(shù)將元素序列累積到某個值。此方法有兩個參數(shù):


  起始值


  累加器函數(shù)。


  如果有一個List,希望得到所有這些元素和一些初始值的總和。

  


  collect


  Collectors類中提供了功能豐富的工具方法


  toList


  toSet


  toCollection


  toMap


  ...


  而這些方法,都需要通過 collect 方法傳入。

  


  collect 可以把Stream數(shù)據(jù)流轉(zhuǎn)化為Collection對象,


  騷技巧


  for循環(huán)


  除了常規(guī)的對象Stream,還有一些有特殊類型的Stream,用于處理基本數(shù)據(jù)類型int、long和double,它是IntStream、LongStream和DoubleStream。


  比如可以使用IntStream.range()來代替常規(guī)的for循環(huán)。

  


  隨機數(shù)


  Random的ints方法可以返回一個隨機數(shù)據(jù)流,比如返回1到100的10個隨機數(shù)。

  


  大小寫轉(zhuǎn)化

  


  Stream 特點


  總之,Stream 的特性可以歸納為:


  無存儲


  Stream并不是一種數(shù)據(jù)結(jié)構(gòu),它只是某種數(shù)據(jù)源的一個視圖


  安全性


  對Stream的任何修改都不會修改背后的數(shù)據(jù)源,比如對stream執(zhí)行過濾操作并不會刪除被過濾的元素,而是會產(chǎn)生一個不包含被過濾元素的新Stream。


  惰式執(zhí)行


  Stream上的操作并不會立即執(zhí)行,只有等到用戶真正需要結(jié)果的時候才會執(zhí)行。


  一次性


  Stream只能被“消費”一次,一旦遍歷過就會失效,就像容器的迭代器那樣,想要再次遍歷必須重新生成。


  lambda


  所有 Stream 的操作必須以 lambda 表達式為參數(shù)



  以上就是深圳達內(nèi)教育java培訓機構(gòu)的小編針對“Java基礎學習:Java8的新特性”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。


Java基礎學習

培訓啦提醒您:交易時請核實對方資質(zhì),對于過大宣傳或承諾需謹慎!任何要求預付定金、匯款等方式均存在風險,謹防上當。