真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java8新特性Stream流如何使用

這篇文章主要介紹“Java8新特性Stream流如何使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Java8新特性Stream流如何使用”文章能幫助大家解決問題。

中站ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

Stream流的概念

為什么要使用Stream流?

Java8新特性Stream流如何使用

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

Java8新特性Stream流如何使用

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

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

數(shù)據(jù)源流的來源??梢允羌?,數(shù)組等。

Stream的兩個基礎的特征:

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

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

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

Stream流的獲取

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

1.通過Collection集合獲取

2.Stream接口的靜態(tài)方法of獲取

通過Collection集合獲取

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

//把集合轉(zhuǎn)換為stream流

//list集合

Listlist=new ArrayList<>();

Streamstream=list.stream();

//set集合

Setset=new HashSet<>();

Streamstream2=set.stream();

//map集合(map集合需要間接的轉(zhuǎn)換)

Mapmap=new HashMap<>();

//方法一:獲取鍵,存儲到一個set集合中

SetkeySet=map.keySet();

Streamstream3=keySet.stream();

//方法二:獲取值,存儲到一個collection集合中

Collectionvalues=map.values();

Streamstream4=values.stream();

//方法三:獲取鍵值對,,鍵與值的映射關系,entrySet()

Set>entries=map.entrySet();

Stream>stream5=entries.stream();

2.Stream接口的靜態(tài)方法of獲取

Stream接口的靜態(tài)方法of可以獲取數(shù)組對應的流。

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

//把數(shù)組轉(zhuǎn)換成Stream流

Streamstream6=Stream.of(1,2,3,4,5);

//可變參數(shù)可以傳遞數(shù)組

Integer[]arr={1,2,3,4,5};

Streamstream7=Stream.of(arr);

String[]arr2={"a","bb","ccc"};

Streamstream8=Stream.of(arr2);

stream流的常用方法

stream的常用方法分為兩類:

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

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

Java8新特性Stream流如何使用

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

forEach遍歷方法

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

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

基本使用

public class Demo03Stream_forEach {

public static void main(String[] args) {

Streamstream=Stream.of("張三","李四","王五","趙六","小明","小胖");

/*stream.forEach((String name)->{

System.out.println(name);

});*/

stream.forEach(name->System.out.println(name));

}

}

filter過濾方法

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

Java8新特性Stream流如何使用

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

基本使用

public class Demo04Stream_filter {

public static void main(String[] args) {

//創(chuàng)建一個Stream流

Streamstream=Stream .of("張三豐","趙敏","張無忌","周芷若","張三","獅王","張大牛");

//對Stream流中的元素進行過濾。只要張的人

Streamstream2=stream.filter((String name)->{return name.startsWith("張");});

//遍歷Stream流

stream2.forEach(name->System.out.println(name));

}

}

map映射方法(轉(zhuǎn)換)

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

Java8新特性Stream流如何使用

上面的圖將不同元素的數(shù)據(jù)轉(zhuǎn)換成用一種類型的元素。

基本使用

public class Demo05Stream_map {

public static void main(String[] args) {

//獲取一個String類型的Stream流

Streamstream=Stream.of("1","2","3","4","5");

//使用map方法,把字符串類型的整數(shù),轉(zhuǎn)換(映射)為integer類型的整數(shù)

Streamstream2=stream.map((String s)->{

return Integer.parseInt(s);

});

//遍歷Stream流

stream2.forEach(i->System.out.println(i));

}

}

count統(tǒng)計元素個數(shù)方法

用于統(tǒng)計Stream流中的元素個數(shù),count方法是一個終結方法,返回值是一個Long類型的整數(shù)。所以不能再繼續(xù)調(diào)用Stream流中的其他方法了

基本使用

public class Demo06Stream_count {

public static void main(String[] args) {

//獲取一個Stream流

ArrayListlist=new ArrayList();

//添加元素

list.add(1);

list.add(2);

list.add(3);

list.add(4);

list.add(5);

list.add(6);

list.add(7);

Streamstream=list.stream();

//統(tǒng)計stream流中的元素個數(shù)

long count=stream.count();

//打印輸出

System.out.println(count);//7

}

}

limit截取流元素方法

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

Java8新特性Stream流如何使用

基本使用

public class Demo07Stream_limit {

public static void main(String[] args) {

show02();

}

private static void show02() {

//創(chuàng)建一個String類型的數(shù)組

String[]arr={"喜羊羊","美羊羊","沸羊羊","懶羊羊","灰太狼","紅太狼"};

//集合獲取一個Stream流

Streamstream=Stream.of(arr);

//用limit方法截取前6個元素

Streamstream2=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) {

//創(chuàng)建一個String類型的數(shù)組

String[]arr={"喜羊羊","美羊羊","懶羊羊","慢羊羊","紅太狼","灰太狼","小灰灰","沸羊羊","軟綿綿","武大狼"};

//獲取Stream流

Streamstream=Stream.of(arr);

//使用skip方法截取后面的元素

Streamstream2=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) {

//創(chuàng)建一個Stream流

Streamstream=Stream.of("張三豐","張翠山","趙敏","周芷若","張無忌");

//創(chuàng)建一個String類型的數(shù)組

String[]arr={"喜羊羊","美羊羊","懶羊羊","慢羊羊","紅太狼","灰太狼","小灰灰","沸羊羊","軟綿綿","武大狼"};

//獲取Stream流

Streamstream2=Stream.of(arr);

//使用常用方法concat方法合并流

Streamstream3=Stream.concat(stream, stream2);

//遍歷Stream3流

stream3.forEach(i->System.out.println(i));

}

}

Stream流的練習

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

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

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

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

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

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

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

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

6.根據(jù)姓名創(chuàng)建Person對象:存儲到一個新集合中,

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

示例:

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

第二支隊伍:古娜力扎、張無忌、趙麗穎、張三豐、尼古拉斯趙四、張?zhí)鞇邸埗?/p>

首先創(chuàng)建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 + "]";

}

}

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

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

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

// 第一支隊伍

// 創(chuàng)建集合

ArrayList one = new ArrayList<>();

// 添加元素

one.add("迪麗熱巴");

one.add("宋遠橋");

one.add("蘇星河");

one.add("石破天");

one.add("石中玉");

one.add("老子");

one.add("莊子");

one.add("洪七公");

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

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

StreamoneStream=one.stream().filter(name->name.length()==3).limit(3);

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

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

// 第二支隊伍

// 創(chuàng)建集合

ArrayList tow = new ArrayList<>();

// 添加元素

tow.add("古娜力扎");

tow.add("張無忌");

tow.add("趙麗穎");

tow.add("張三豐");

tow.add("尼古拉斯趙四");

tow.add("張?zhí)鞇?);

tow.add("張二狗");

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

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

StreamtowStream=tow.stream().filter(name->name.startsWith("張")).skip(2);

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

6.根據(jù)姓名創(chuàng)建Person對象:存儲到一個新集合中,

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

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

//6.根據(jù)姓名創(chuàng)建Person對象:存儲到一個新集合中,

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

Stream.concat(oneStream,towStream).map(name->new Person(name)).forEach(p->System.out.println(p));

Java8新特性Stream流如何使用

關于“Java8新特性Stream流如何使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。


新聞標題:Java8新特性Stream流如何使用
路徑分享:http://weahome.cn/article/ihcgji.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部