欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Stream流零基礎(chǔ)教程

 更新時(shí)間:2022年11月10日 16:30:53   作者:填丶涂  
Java8的另一大亮點(diǎn)Stream,它與java.io包里的InputStream和OutputStream是完全不同的概念,下面這篇文章主要給大家介紹了關(guān)于Java8中Stream詳細(xì)使用方法的相關(guān)資料,需要的朋友可以參考下

一、Stream流介紹

在JDK8時(shí),JAVA新增了lambda表達(dá)式,它與 java.io 包里的 InputStream和 OutputStream是完全不同的概念,他更跟流沒有任何關(guān)系。它也不同于 StAX 對(duì) XML解析的 Stream,也不是 Amazon Kinesis 對(duì)大數(shù)據(jù)實(shí)時(shí)處理的Stream。

JDK8 中的 Stream 是對(duì)集合(Collection)對(duì)象功能的增強(qiáng),它借助于lambda表達(dá)式,更優(yōu)雅的表達(dá)風(fēng)格,極大的提高編程效率和程序可讀性。它針對(duì)于對(duì)集合對(duì)象進(jìn)行各種非常便利、高效的聚合操作,或者大批量數(shù)據(jù)操作。不多說,上用法。

二、Stream流實(shí)現(xiàn)與傳統(tǒng)方式實(shí)現(xiàn)對(duì)比

**案例:**找出列表中包含張三且姓名長(zhǎng)度為2的名字

2.1、傳統(tǒng)方式實(shí)現(xiàn)

package com.controller;
import java.util.ArrayList;
public class Aoo {
    public static void main(String[] args) {
        // 1.定義一個(gè)集合
        ArrayList<String> list = new ArrayList<>();
        list.add("張三");
        list.add("張四");
        list.add("四");
        list.add("張四");
        list.add("張四");
        list.add("張四");
        list.add("張四");
        // 2.挑選list中包含張三的
        ArrayList<String> list1 = new ArrayList<>();
        for (String s : list) {
            if (s.startsWith("張三")){
                list1.add(s);
            }
        }
        System.out.println("挑選list包含張三的結(jié)果:"+list1);
        // 3.再從list1中挑選挑選名字長(zhǎng)度為2的
        ArrayList<String> list2 = new ArrayList<>();
        for (String s : list1) {
            if (s.length() == 2){
                list2.add(s);
            }
        }
        System.out.println("挑選list1長(zhǎng)度為2的結(jié)果:"+list2);
        // 4、遍歷
        for (String s : list2) {
            System.out.println("最終結(jié)果 = " + s);
        }
    }
}

2.2、Stream流方式實(shí)現(xiàn)

package com.controller;
import java.util.ArrayList;
public class Boo {
    public static void main(String[] args) {
        // 定義一個(gè)集合,并填入數(shù)據(jù)
        ArrayList<String> list = new ArrayList<>();
        list.add("張三");
        list.add("李四");
        list.add("李四");
        list.add("李四");
        list.add("王五");
        list.add("王五");
        list.add("王五");
        //Stream流的實(shí)現(xiàn)
        list.stream()
                .filter((name) -> name.startsWith("張三"))
                .filter((name) -> name.length()==2)
                .forEach((name) -> System.out.println(name));
    }
}

三、Stream流的常用API

3.1、stream流的獲取

在Collection集合下,均有一個(gè)stream(),另一個(gè)即是用Stream的一個(gè)靜態(tài)方法 of() 實(shí)現(xiàn)。

上代碼:

package com.controller;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Stream;
public class Boo {
    public static void main(String[] args) {
        //Collction集合
        Collection<String> collection = new ArrayList();
        Stream<String> stream = collection.stream();
        //List集合
        List<String> list = new ArrayList<>();
        Stream<String> stream1 = list.stream();
        //ArrayList集合
        ArrayList<String> arrayList = new ArrayList<>();
        Stream<String> stream2 = arrayList.stream();
        //LinkedList集合
        LinkedList<String> linkedList = new LinkedList<>();
        Stream<String> stream3 = linkedList.stream();
        //of()方式的實(shí)現(xiàn)
        List<String> list1 = new ArrayList<>();
        Stream<List<String>> stream4 = Stream.of(list1);
        //傳入可變數(shù)組
        Stream<String> stream5 = Stream.of("1","2","3","4");
    }
}

3.2、forEach()

遍歷流中的對(duì)象

package com.controller;
import java.util.ArrayList;
public class Aoo {
    public static void main(String[] args) {
        // 定義一個(gè)集合
        ArrayList<String> list = new ArrayList<>();
        list.add("張三");
        list.add("李四");
        list.add("李四");
        list.add("李四");
        list.add("李四");
        list.add("李四");
        list.add("李四");
        //遍歷流的對(duì)象
        list.stream().forEach((name) -> System.out.println(name));
    }
}

3.3、filter()

filter對(duì)流對(duì)象進(jìn)行過濾操作

package com.controller;
import java.util.ArrayList;
public class Aoo {
    public static void main(String[] args) {
        // 定義一個(gè)集合
        ArrayList<String> list = new ArrayList<>();
        list.add("張三");
        list.add("李四二");
        list.add("李四我");
        list.add("李四去晚");
        list.add("李四請(qǐng)問");
        list.add("李四去");
        list.add("李四我");
        //過濾流的對(duì)象
        list.stream().filter((name) -> name.length()==2);
    }
}

3.4、map()

map()是對(duì)集合中的對(duì)象進(jìn)行映射的,將對(duì)象從一種類型轉(zhuǎn)換成另一種類型

package com.controller;
import java.util.ArrayList;
public class Aoo {
    public static void main(String[] args) {
        // 定義一個(gè)集合
        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        list.add("6");
        list.add("7");
        //map()是對(duì)集合中的對(duì)象進(jìn)行映射的,將對(duì)象從一種類型轉(zhuǎn)換成另一種類型
        list.stream().map(num -> Integer.parseInt(num));
    }
}

3.5、count()

count是對(duì)流數(shù)據(jù)統(tǒng)計(jì)的方法,但是count之后返回的是long類型,因此無法再進(jìn)行流操作。

package com.controller;
import java.util.ArrayList;
public class Aoo {
    public static void main(String[] args) {
        // 定義一個(gè)集合
        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        list.add("6");
        list.add("7");
        //count()對(duì)流數(shù)據(jù)進(jìn)行統(tǒng)計(jì)
        System.out.println(list.stream().count());
    }
}
3.6、limit()

3.6、limit()

選取流數(shù)據(jù)的前多少條數(shù)據(jù)

package com.controller;
import java.util.ArrayList;
public class Aoo {
    public static void main(String[] args) {
        // 定義一個(gè)集合
        ArrayList<String> list = new ArrayList<>();
        list.add("李二1");
        list.add("李二2");
        list.add("李二3");
        list.add("李二4");
        list.add("李二5");
        list.add("李二6");
        list.add("李二7");
        //limit() 選取流數(shù)據(jù)的前多少條數(shù)據(jù)
        list.stream().limit(2);
    }
}

3.7、skip()

跳過流數(shù)據(jù)的前多少條數(shù)據(jù),該方法與limit()方法剛好相反

package com.controller;
import java.util.ArrayList;
public class Aoo {
    public static void main(String[] args) {
        // 定義一個(gè)集合
        ArrayList<String> list = new ArrayList<>();
        list.add("李小龍1");
        list.add("李小龍2");
        list.add("李小龍3");
        list.add("李小龍4");
        list.add("李小龍5");
        list.add("李小龍6");
        list.add("李小龍7");
        //skip() 跳過流數(shù)據(jù)的前多少條數(shù)據(jù)
        list.stream().skip(2);
    }
}

3.8、concat()

Stream的靜態(tài)方法concat()實(shí)現(xiàn)對(duì)兩個(gè)流數(shù)據(jù)進(jìn)行合并

package com.controller;
import java.util.ArrayList;
import java.util.stream.Stream;
public class Aoo {
    public static void main(String[] args) {
        // 定義一個(gè)集合
        ArrayList<String> list = new ArrayList<>();
        list.add("張三豐1");
        list.add("張三豐2");
        list.add("張三豐3");
        list.add("張三豐4");
        list.add("張三豐5");
        list.add("張三豐6");
        list.add("張三豐7");
        // 定義一個(gè)集合
        ArrayList<String> list1 = new ArrayList<>();
        list1.add("1");
        list1.add("2");
        list1.add("3");
        list1.add("4");
        list1.add("5");
        list1.add("6");
        list1.add("7");
        //concat()實(shí)現(xiàn)對(duì)兩個(gè)流數(shù)據(jù)進(jìn)行合并
        Stream.concat(list.stream(),list1.stream());
    }
}

四、總結(jié)

Stream 使用一種類似用 SQL 語句從數(shù)據(jù)庫查詢數(shù)據(jù)的直觀方式來提供一種對(duì) Java 集合運(yùn)算和表達(dá)的高階抽象。Stream API可以極大提高Java程序員的生產(chǎn)力,讓

程序員寫出高效率、干凈、簡(jiǎn)潔的代碼。這種風(fēng)格將要處理的元素集合看作一種流, 流在管道中傳輸, 并且可以在管道的節(jié)點(diǎn)上進(jìn)行處理, 比如篩選, 排序,聚合等。

到此這篇關(guān)于Java Stream流零基礎(chǔ)教程的文章就介紹到這了,更多相關(guān)Java Stream流內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java?NIO實(shí)戰(zhàn)之多人聊天室

    Java?NIO實(shí)戰(zhàn)之多人聊天室

    這篇文章主要為大家詳細(xì)介紹了Java?NIO實(shí)戰(zhàn)之多人聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 使用Java實(shí)現(xiàn)動(dòng)態(tài)生成MySQL數(shù)據(jù)庫

    使用Java實(shí)現(xiàn)動(dòng)態(tài)生成MySQL數(shù)據(jù)庫

    這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)動(dòng)態(tài)生成MySQL數(shù)據(jù)庫,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • JAVA中使用FileWriter寫數(shù)據(jù)到文本文件步驟詳解

    JAVA中使用FileWriter寫數(shù)據(jù)到文本文件步驟詳解

    這篇文章主要介紹了JAVA中使用FileWriter寫數(shù)據(jù)到文本文件步驟詳解,FileWriter類提供了多種寫入字符的方法,包括寫入單個(gè)字符、寫入字符數(shù)組和寫入字符串等,它還提供了一些其他的方法,如刷新緩沖區(qū)、關(guān)閉文件等,需要的朋友可以參考下
    2023-10-10
  • JMM核心概念之Happens-before原則

    JMM核心概念之Happens-before原則

    關(guān)于Java并發(fā)的通信機(jī)制是基于共享內(nèi)存實(shí)現(xiàn)的,線程之間共享程序的公共狀態(tài),通過寫-讀內(nèi)存中的公共狀態(tài)進(jìn)行隱式通信,這對(duì)程序員是透明的,我們需要理解其工作機(jī)制,以防止內(nèi)存可見性問題,從而編寫出正確同步的代碼
    2021-06-06
  • java集合PriorityQueue優(yōu)先級(jí)隊(duì)列方法實(shí)例

    java集合PriorityQueue優(yōu)先級(jí)隊(duì)列方法實(shí)例

    這篇文章主要為大家介紹了java集合PriorityQueue優(yōu)先級(jí)隊(duì)列方法實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • apache commons工具集代碼詳解

    apache commons工具集代碼詳解

    這篇文章主要介紹了apache commons工具集代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • Spring Boot實(shí)現(xiàn)功能的統(tǒng)一詳解

    Spring Boot實(shí)現(xiàn)功能的統(tǒng)一詳解

    這篇文章主要介紹了Spring Boot統(tǒng)一功能的處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • idea如何自動(dòng)生成serialVersionUID

    idea如何自動(dòng)生成serialVersionUID

    這篇文章主要介紹了idea如何自動(dòng)生成serialVersionUID,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • java實(shí)現(xiàn)百度云文字識(shí)別接口代碼

    java實(shí)現(xiàn)百度云文字識(shí)別接口代碼

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)百度云文字識(shí)別的接口代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • MyBatis注解方式之@Update/@Delete使用詳解

    MyBatis注解方式之@Update/@Delete使用詳解

    這篇文章主要介紹了MyBatis注解方式之@Update/@Delete使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11

最新評(píng)論