gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

一文掌握Java8新特性Stream流的概念和使用

本篇文章給大家帶來了關于java的相關知識,其中主要整理了Stream流的概念和使用的相關問題,包括了Stream流的概念、Stream流的獲取、Stream流的常用方法等等內容,下面一起來看一下,希望對大家有幫助。

一文掌握Java8新特性Stream流的概念和使用

推薦學習:《java視頻教程》

當我們說到流的時候大家就會很容易聯想到IO流,以為Stream流也是IO流,其實不然。Stream流是Java8中引入的一個全新的概念,用于解決已有集合類庫既有的一些弊端。既然要學習Stream流,我們就要暫時忘記IO流的傳統概念。我們今天就從Stream流的概念、特點、作用、使用方法等方法詳解一下Stream流,那我就一起往下看吧!

Stream流的概念

為什么要使用Stream流?

一文掌握Java8新特性Stream流的概念和使用

Stream流的思想類似于一個生產車間的流水線。當需要對多個元素進行操作(特別是多步操作)的時候,考慮到性能及便利性,我們應該首先拼好一個“模型”步驅方案,然后再按照方案去執行它。

一文掌握Java8新特性Stream流的概念和使用

Stream(流)是一個來自數據源的元素隊列

元素是 特定類型的對象,形成一個隊列。lava中的Stream并不會存儲元素,而是按需計算。

數據源 流的來源。可以是集合,數組等。

Stream的兩個基礎的特征:

·Pipelining:中間操作都會飯回流對象本身。這樣多個操作可以事聯成一個管道,如同流式風格(fluentstyle)。這樣做可以對操作進行優化,比如延遲執行(laziness)和短路(short-circuiting)。

內部迭代:以前對集合遍歷都是通過iterator或者增強for的方式顯式的在集合外部進行迭代,這叫做外部迭代。Stream提供了內部迭代的方式,流可以直接調用遍歷方法。

當使用一個流的時候,通常包括三個基本步驟:獲取一個數據源(source)→數據轉換一執行操作獲取想要的結果,每次轉換原有Stream對象不改變,返回一個新的Stream對象(可以有多次轉換),這就允許對其操作可以像鏈條一樣排列,變成一個管道。

Stream流的獲取

獲取流的常用方式有2種:

1.通過Collection集合獲取

2.Stream接口的靜態方法of獲取

通過Collection集合獲取

所有的Collection集合都可以通過stream默認方法獲取流

//把集合轉換為stream流  //list集合  List<String>list=new ArrayList<>();  Stream<String>stream=list.stream();  //set集合  Set<String>set=new HashSet<>();  Stream<String>stream2=set.stream();  //map集合(map集合需要間接的轉換)  Map<String, String>map=new HashMap<>();  //方法一:獲取鍵,存儲到一個set集合中  Set<String>keySet=map.keySet();  Stream<String>stream3=keySet.stream();  //方法二:獲取值,存儲到一個collection集合中  Collection<String>values=map.values();  Stream<String>stream4=values.stream();  //方法三:獲取鍵值對,,鍵與值的映射關系,entrySet()  Set<Map.Entry<String, String>>entries=map.entrySet();  Stream<Map.Entry<String, String>>stream5=entries.stream();

2.Stream接口的靜態方法of獲取

Stream接口的靜態方法of可以獲取數組對應的流。

參數是一個可變參數,那么我們就可以傳遞一個數組

//把數組轉換成Stream流  Stream<Integer>stream6=Stream.of(1,2,3,4,5);  //可變參數可以傳遞數組  Integer[]arr={1,2,3,4,5};  Stream<Integer>stream7=Stream.of(arr);  String[]arr2={"a","bb","ccc"};  Stream<String>stream8=Stream.of(arr2);

stream流的常用方法

stream的常用方法分為兩類:

延遲方法:返回值類型仍然是Stream接口自身類型的方法,因此支持鏈式調用。(除了終結方法外,其余方法均為延遲方法。)

終結方法:返回值類型不再是Stream接口自身類型的方法,因此不再支持類似StringBuilder那樣的鏈式調用。

一文掌握Java8新特性Stream流的概念和使用

以上是一些stream流的常用方法,下面我們就依次學習一下這些方法的使用。

forEach遍歷方法

該方法接受一個Consumer接口函數,會將每一個流元素交給函數進行處理。Consumer接口是一個消費性的函數式接口,可以傳遞lambda表達式,消費數據。

foeeach方法,用來遍歷流中的數據,是一個終結方法,遍歷之后就不能使用流中的其他方法。

基本使用

public class Demo03Stream_forEach {  public static void main(String[] args) {  Stream<String>stream=Stream.of("張三","李四","王五","趙六","小明","小胖");  /*stream.forEach((String name)->{  System.out.println(name);  });*/  stream.forEach(name->System.out.println(name));  }  }

filter過濾方法

用于對Stream流中的數進行過濾。filter方法的參數Predicatehi一個函數式接口,所以可以傳遞lambda表達式,對數據進行過濾。可以通過filter方法將一個轉換過濾為下一個流,如下圖:

一文掌握Java8新特性Stream流的概念和使用

上面這個圖把一些不也一樣的元素,用filter方法進行過濾,然后成為新的流。

基本使用

public class Demo04Stream_filter {  public static void main(String[] args) {  //創建一個Stream流  Stream<String>stream=Stream .of("張三豐","趙敏","張無忌","周芷若","張三","獅王","張大牛");  //對Stream流中的元素進行過濾。只要張的人  Stream<String>stream2=stream.filter((String name)->{return name.startsWith("張");});  //遍歷Stream流  stream2.forEach(name->System.out.println(name));  }  }

map映射方法(轉換)

如果需要將流中的元素轉換到另一個流中,可以使用map方法。該接口需要一個Funtion函數式接口參數,可以將當前流中的T類型數據類型轉換為另一種R類型的數據流,如下圖:

一文掌握Java8新特性Stream流的概念和使用

上面的圖將不同元素的數據轉換成用一種類型的元素。

基本使用

public class Demo05Stream_map {  public static void main(String[] args) {  //獲取一個String類型的Stream流  Stream<String>stream=Stream.of("1","2","3","4","5");  //使用map方法,把字符串類型的整數,轉換(映射)為integer類型的整數  Stream<Integer>stream2=stream.map((String s)->{  return Integer.parseInt(s);  });  //遍歷Stream流  stream2.forEach(i->System.out.println(i));  }  }

count統計元素個數方法

用于統計Stream流中的元素個數,count方法是一個終結方法,返回值是一個Long類型的整數。所以不能再繼續調用Stream流中的其他方法了

基本使用

public class Demo06Stream_count {  public static void main(String[] args) {  //獲取一個Stream流  ArrayList<Integer>list=new ArrayList<Integer>();  //添加元素  list.add(1);  list.add(2);  list.add(3);  list.add(4);  list.add(5);  list.add(6);  list.add(7);  Stream<Integer>stream=list.stream();  //統計stream流中的元素個數  long count=stream.count();  //打印輸出  System.out.println(count);//7  }  }

limit截取流元素方法

Limit方法可以對流進行截取,只取用前n個。參數是一個long型,如果集合當前長度大于參數則進行截取,否則不進行操作。limit方法是一個延遲方法,只是對流中的元素進行截取,返回一個新的流,使用可以繼續調用stream流中的其他方法。

一文掌握Java8新特性Stream流的概念和使用

基本使用

public class Demo07Stream_limit {  public static void main(String[] args) {  show02();  }  private static void show02() {  //創建一個String類型的數組  String[]arr={"喜羊羊","美羊羊","沸羊羊","懶羊羊","灰太狼","紅太狼"};  //集合獲取一個Stream流  Stream<String>stream=Stream.of(arr);  //用limit方法截取前6個元素  Stream<String>stream2=stream.limit(3);  //遍歷Stream2流  stream2.forEach(i->System.out.println(i));  }  }

skip跳過元素方法

如果希望跳過前幾個元素,可以使用skip方法獲取一個截取之后的新流,如果流的當前長度大于n,則跳過前n個;否則將會得到一個長度為0的流。

一文掌握Java8新特性Stream流的概念和使用

基本使用

public class Demo08Stream_skip {  public static void main(String[] args) {  //創建一個String類型的數組  String[]arr={"喜羊羊","美羊羊","懶羊羊","慢羊羊","紅太狼","灰太狼","小灰灰","沸羊羊","軟綿綿","武大狼"};  //獲取Stream流  Stream<String>stream=Stream.of(arr);  //使用skip方法截取后面的元素  Stream<String>stream2=stream.skip(5);  //遍歷stream2流  stream2.forEach(i->System.out.println(i));  }  }

concat:合并方法

用于把流組合到一塊。如果有兩個流,希望合并成為一個流,就可以使用concat方法

一文掌握Java8新特性Stream流的概念和使用

基本使用

public class Demo09Stream_concat {  public static void main(String[] args) {  //創建一個Stream流  Stream<String>stream=Stream.of("張三豐","張翠山","趙敏","周芷若","張無忌");  //創建一個String類型的數組  String[]arr={"喜羊羊","美羊羊","懶羊羊","慢羊羊","紅太狼","灰太狼","小灰灰","沸羊羊","軟綿綿","武大狼"};  //獲取Stream流  Stream<String>stream2=Stream.of(arr);  //使用常用方法concat方法合并流  Stream<String>stream3=Stream.concat(stream, stream2);  //遍歷Stream3流  stream3.forEach(i->System.out.println(i));  }  }

Stream流的練習

最后,我們通過下面的練習來鞏固一下上面所學的內容。

現在有兩個ArrayList集合存儲隊伍當中的多個成員姓名,

要求使用傳統的for循環(或增強for循環)依次進行以下若干操作步驟:

1.第一個隊伍只要名字為3個字的成員姓名:存儲到一個新集合中。

2.第一個隊伍篩選之后只要前3個人;存儲到一個新集合中。

3.第二個隊伍只要姓張的成員姓名;存儲到一個新集合中。

4.第二個隊伍篩選之后不要前2個人;存儲到一個新集合中。

5.將兩個隊伍合并為一個隊伍;存儲到一個新集臺中。

6.根據姓名創建Person對象:存儲到一個新集合中,

7.打印整個隊伍的Person對象信息。

示例:

第一支隊伍:迪麗熱巴、宋遠橋、蘇星河、石破天、石中玉、老子、莊子、洪七公

第二支隊伍:古娜力扎、張無忌、趙麗穎、張三豐、尼古拉斯趙四、張天愛、張二狗

首先創建Person對象類

public class Person {  private String name;  public Person() {  super();  }  public Person(String name) {  super();  this.name = name;  }  public String getName() {  return name;  }  public void setName(String name) {  this.name = name;  }  @Override  public String toString() {  return "Person [name=" + name + "]";  }  }

然后再根據習題要求用Stream流進行過濾

1.第一個隊伍只要名字為3個字的成員姓名:存儲到一個新集合中。

2.第一個隊伍篩選之后只要前3個人;存儲到一個新集合中。

// 第一支隊伍  // 創建集合  ArrayList<String> one = new ArrayList<>();  // 添加元素  one.add("迪麗熱巴");  one.add("宋遠橋");  one.add("蘇星河");  one.add("石破天");  one.add("石中玉");  one.add("老子");  one.add("莊子");  one.add("洪七公");  //1.第一個隊伍只要名字為3個字的成員姓名:存儲到一個新集合中。  //2.第一個隊伍篩選之后只要前3個人;存儲到一個新集合中。  Stream<String>oneStream=one.stream().filter(name->name.length()==3).limit(3);

3.第二個隊伍只要姓張的成員姓名;存儲到一個新集合中。

4.第二個隊伍篩選之后不要前2個人;存儲到一個新集合中。

// 第二支隊伍  // 創建集合  ArrayList<String> tow = new ArrayList<>();  // 添加元素  tow.add("古娜力扎");  tow.add("張無忌");  tow.add("趙麗穎");  tow.add("張三豐");  tow.add("尼古拉斯趙四");  tow.add("張天愛");  tow.add("張二狗");  //3.第二個隊伍只要姓張的成員姓名;存儲到一個新集合中。  //4.第二個隊伍篩選之后不要前2個人;存儲到一個新集合中。  Stream<String>towStream=tow.stream().filter(name->name.startsWith("張")).skip(2);

5.將兩個隊伍合并為一個隊伍;存儲到一個新集臺中。

6.根據姓名創建Person對象:存儲到一個新集合中,

7.打印整個隊伍的Person對象信息。

//5.將兩個隊伍合并為一個隊伍;存儲到一個新集臺中。  //6.根據姓名創建Person對象:存儲到一個新集合中,  //7.打印整個隊伍的Person對象信息。  Stream.concat(oneStream,towStream).map(name->new Person(name)).forEach(p->System.out.println(p));

最后運行結果

一文掌握Java8新特性Stream流的概念和使用

總結

最后,今天的內容就學到這里啦。主要熟悉和明白Stream流的一個思想概念、會使用Stream流的獲取、和熟練掌握Stream流的一些常用方法。

一文掌握Java8新特性Stream流的概念和使用

推薦學習:《java視頻教程》

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
丰满人妻中伦妇伦精品app| 黄色片视频在线免费观看| 91香蕉视频导航| 日本一本二本在线观看| 国产91在线免费| 久久精品香蕉视频| 日韩精品免费播放| 色一情一乱一伦一区二区三区日本| www国产黄色| www.日本xxxx| 国产毛片久久久久久| aaa免费在线观看| 激情五月五月婷婷| av网站大全免费| 日韩av一二三四| 日本高清免费在线视频| 欧美一级爱爱视频| 黄色片网址在线观看| 青青视频在线播放| 日本精品一区在线| 中文精品无码中文字幕无码专区| 日本福利视频在线观看| 噜噜噜久久亚洲精品国产品麻豆 | 爱豆国产剧免费观看大全剧苏畅| 美女喷白浆视频| av电影一区二区三区| 亚洲精品无码国产| 91国产精品视频在线观看| 五月天开心婷婷| 国产精品入口芒果| 在线观看免费av网址| www.欧美黄色| 在线观看国产一级片| 国产精品久久成人免费观看| 日韩精品一区二区三区久久| 色www免费视频| 成人性免费视频| 亚洲美女性囗交| 红桃av在线播放| 黄色影视在线观看| jizz18女人| 欧美 丝袜 自拍 制服 另类| 色婷婷综合在线观看| 国产精品无码专区av在线播放| 日本一本草久p| 久久人人爽av| 97国产精东麻豆人妻电影| 亚洲天堂伊人网| 久久久精品麻豆| 国产亚洲欧美在线视频| 性做爰过程免费播放| 粉色视频免费看| 男人操女人免费软件| 久操手机在线视频| 天天想你在线观看完整版电影免费| 免费观看成人在线视频| 成人免费毛片网| 成年人午夜视频在线观看| 亚洲一区 在线播放| www.国产福利| 性chinese极品按摩| 国产天堂在线播放| 能看的毛片网站| 日韩中文字幕三区| 午夜精品久久久久久久无码| 国产 国语对白 露脸| 九一免费在线观看| www插插插无码免费视频网站| 女女同性女同一区二区三区按摩| 人人爽人人爽av| 日韩精品一区二区三区电影| 日本成人xxx| 影音先锋成人资源网站| 成人黄色片免费| 国产情侣第一页| www.玖玖玖| www.日本xxxx| 婷婷激情小说网| 国产免费裸体视频| 日韩av资源在线| 日本熟妇人妻中出| 午夜影院免费版| 91视频成人免费| 欧美a v在线播放| 欧美三级理论片| 欧美精品一区二区性色a+v| 影音先锋成人资源网站| 亚洲 高清 成人 动漫| 亚洲高清在线免费观看| 中文字幕av导航| 国产日本在线播放| 亚洲性图一区二区| 国产内射老熟女aaaa| 日韩欧美在线播放视频| 久久久久久蜜桃一区二区| 丰满女人性猛交| 国产三区在线视频| 欧美aaa在线观看| 116极品美女午夜一级| 午夜久久福利视频| 国产精品入口芒果| 色偷偷中文字幕| 黄色片久久久久| 国产又粗又长又爽视频| 免费午夜视频在线观看| 四虎4hu永久免费入口| 欧美日韩中文在线视频| 欧美视频在线第一页| 中文字幕天天干| 黄色av网址在线播放| 欧美精品色视频| 中文字幕永久视频| 欧美日韩亚洲第一| 国产曰肥老太婆无遮挡| 热久久久久久久久| 女人另类性混交zo| 日本韩国欧美在线观看| 艳母动漫在线观看| 亚洲欧美天堂在线| 久久国产这里只有精品| 国产青青在线视频| 老太脱裤让老头玩ⅹxxxx| 黄色免费高清视频| 一级片黄色免费| 超碰人人草人人| 久久精品视频在线观看免费| www黄色在线| 91精品无人成人www| 日本a√在线观看| 蜜臀久久99精品久久久酒店新书| 分分操这里只有精品| 欧美视频在线免费播放| 高清无码一区二区在线观看吞精| 久久精品久久99| 久久久福利影院| 天天爱天天做天天操| 色一情一乱一乱一区91| 国产亚洲精品久久久久久久| av 日韩 人妻 黑人 综合 无码| 日本一道在线观看| www.18av.com| 欧美 日韩 国产在线观看| 日本韩国欧美在线观看| 爱福利视频一区二区| 在线观看av网页| 国产一二三四五| 日本福利视频一区| 成 年 人 黄 色 大 片大 全| 青青草国产精品视频| www黄色在线| 青青草原国产免费| 色欲色香天天天综合网www| www在线观看免费| 手机在线成人免费视频| 中文字幕精品在线播放| 免费av观看网址| 特级丰满少妇一级| 99久久久无码国产精品性色戒| 夜夜添无码一区二区三区| 日本新janpanese乱熟| 大桥未久一区二区| 亚洲 高清 成人 动漫| 在线视频观看一区二区| 婷婷无套内射影院| 天天爱天天操天天干| 亚洲精品国产suv一区88| 国产成人手机视频| 996这里只有精品| 波多野结衣xxxx| 春日野结衣av| 亚洲av综合色区| 一区二区xxx| 午夜免费福利小电影| 在线a免费观看| 波多野结衣天堂| 亚洲美免无码中文字幕在线| 国产探花在线观看视频| 国产精品视频一区二区三区四区五区| 人人爽人人爽av| 中文字幕天天干| 国产成人亚洲精品无码h在线| 国产免费内射又粗又爽密桃视频| 亚洲色精品三区二区一区| 亚洲五码在线观看视频| 国内国产精品天干天干| 日韩中文字幕二区| 男人日女人视频网站| 91亚洲精品国产| 91视频 - 88av| 国内av免费观看| 午夜大片在线观看| 午夜视频在线网站| 色婷婷.com| 一个色综合久久| 小早川怜子一区二区三区| 午夜精品久久久久久久99热影院| 久久久久免费精品| 香蕉视频禁止18| 性欧美videossex精品| 538任你躁在线精品免费|