黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 如何學習java api:Stream API特性

如何學習java api:Stream API特性

更新時間:2020-01-16 15:09:23 來源:動力節點 瀏覽2698次


  隨著Java8的越來越普及,Java8 中Stream API相關的面試越來越多,比如經常有面試官會問,是否有使用過Java8的經驗?簡單介紹一下流API等。下面小編簡單的整理了Java8 Stream API的一些特性,對Stream API相關面試題做一個入口級別的回答。掌握這些內容,便于引導面試官繼續向下深入發問。


如何學習java api:Stream API特性


  Stream 的定義:“根據支持數據處理操作的源生成的元素序列”。


  ●元素序列——就像集合一樣,流也提供了一個接口,可以訪問特定元素類型的一組有序值。流的目的在于表達計算,比如filter、sorted和map。集合講的是數據(存儲),流講的是計算(處理)。


  ●源——流會使用一個提供數據的源,如集合、數組等。


  ●數據處理操作——流的數據處理功能支持類似于數據庫的操作,以及函數式編程語言中的常用操作,如filter、map、reduce、find、match、sort等。流操作可以順序執行,也可并行執行。


  stream 操作的特點


  ●流水線——很多流操作本身會返回一個流,這樣多個操作就可以鏈接起來,形成一個大的流水線。


  通過stream的這個操作特性,我們可以方便的使用鏈式編程(只要這個操作方法返回類型為stream即可),將多個操作聯系起來.非常類似于數據庫操作的sql語法(從哪張表查,查詢條件是什么,查詢哪些列的數據,排序規則如何等等),流水線的操作可以看作對數據源進行數據庫式查詢。


  ●內部迭代——與使用迭代器外部迭代的集合不同,流的迭代操作是在背后進行的。


  使用迭代器對集合數據進行迭代.這種方式有一定的缺陷:需要將如何迭代的代碼與邏輯代碼進行耦合.


  // 需求: 從學生名字列表中,篩選出姓李的學生,再篩選出名字是三個字的學生,最后將結果打印


  Listtemp = new ArrayList<>();

  for (String name : list) {

  if (name.startsWith("李")) {// 通過姓氏篩選

  temp.add(name);

  }

  }

  Listtemp1 = new ArrayList<>();

  for (String name : temp) {

  if (name.length() == 3) {// 通過名字長度篩選

  temp1.add(name);

  }

  }

  for (String string : temp1) {// 打印結果

  System.out.println(string);

  }


  對于上面的案例,我們使用傳統的方式來做,看起來沒有問題,但是,實現之后,回到本質上來,其實我們的需求僅僅是想做三件事而已,但是因為各種語法規范,我們不得不寫出循環,再在循環中加入我們的邏輯.


  比如,如果我現在需求改變,不想通過這兩個條件篩選,那么,我們現在的代碼將會改動很大.這就是耦合.


  而,使用stream的方式,真正的舍棄”怎么做”,而回歸到”做什么“上來.


  list.stream().

  filter(x -> x.startsWith("李")).// 篩選姓氏

  filter(x -> x.length() == 3).// 篩選名字長度

  forEach(System.out::println);// 打印


  顯而易見的,使用stream的方式更優雅.而且,結果也是正確的.但是,上面的代碼,有沒有迭代呢?有,但是,這里的迭代,不再與邏輯耦合,這個,就叫內部迭代.


  stream 的特性


  盡管stream的獲取方式,離不開數組或者集合,但是,stream對數據的計算,與傳統方式完全不同.


  stream的特性,主要分為四個方面:


  1.無存儲 。Stream不是一種數據結構,它只是某種數據源的一個視圖,數據源可以是一個數組,集合等。


  如何理解視圖呢?


  比如,找出班上最高的五名同學,僅僅是計算全班的身高而已,而不會影響這五名同學.不會對整個班級有任何影響.


  2.不修改 。對Stream的任何修改都不會修改背后的數據源.


  比如過濾操作并不會刪除被過濾的元素,而是產生一個新Stream。產生的心得Stream流,也僅僅是一個視圖而已.


  3.惰式執行。Stream上的操作并不會立即執行,只有等到用戶真正需要結果的時候才會執行。


  如果操作是中間操作的話,那么,是不會立馬就執行的, 一直等到用戶要做終端操作的時候,才會執行.


  如果操作過程中,方法返回值類型是Stream的,那么他就是中間操作, 如果不是,就是終端操作.


  Listlist = Arrays.asList(1,2,3,4,5);

  list.stream().filter(x -> {

  //經過測試,如果沒有調用終端操作,該語句不會輸出在控制臺.

  System.out.println("過濾操作");

  return x > 1;

  }).forEach(System.out::println);


  filter方法,返回類型為Stream,所以,該方法就是中間操作.


  foreach方法,返回類型不是Stream,所以,該方法就是終端操作.


  惰式執行的意思是:上面的代碼,如果我們不調用foreach方法(終端操作),那么filter方法(中間操作)是一定不會執行的,而在控制臺上一定不會輸出”過濾操作”.


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


如何學習java api:Stream API特性


      以上就是動力節點Java培訓機構小編介紹的“如何學習java api:Stream API特性”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。


  相關文章


  JavaAPI的使用方法詳解


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 日韩免费片 | 美尻在线 | 波多野结衣视频在线免费观看 | 伊人久艹| 国产又黄又爽又猛的免费视频播放 | 国内精品久久久久久影院老狼 | 白丝美女私视频 | 997在线观看视频国产 | 欧美特黄a级高清免费大片 欧美太黄太色视频在线观看 | 久久综合网址 | 五月开心久久 | 日韩一区二区三区在线视频 | yy4138殇情理论片一级毛片 | 久久久久免费精品国产 | 日韩精品1区 | 日本在线免费 | 毛片免费看看 | 久久精品视频8 | 97天天摸天天碰天天爽 | 深夜福利网站在线观看 | 四月激情网 | 手机在线日韩高清理论片 | 区二区三区四区免费视频 | 国产97色在线 | 免费 | 男女午夜影院 | 美女秘密视频白丝 | 欧美日韩一区二区三区免费不卡 | 国产精品久久久久久久久久一区 | 亚洲国产成a人v在线观看 | 最近免费中文字幕大全免费版视频 | 中国美女一级a毛片录像在线 | 日韩欧美二区在线观看 | 欧美专区一区二区三区 | 视频一区国产精品 | 99在线精品日韩一区免费国产 | 欧美成人免费草草影院视频 | 亚洲日韩中文字幕在线播放 | 亚洲成人中文字幕 | 欧美性xxx | 国产精品欧美亚洲韩国日本久久 | 99精品伊人久久久大香线蕉 |