首頁 > 軟體

Java Stream流零基礎教學

2022-11-11 14:00:15

一、Stream流介紹

在JDK8時,JAVA新增了lambda表示式,它與 java.io 包裡的 InputStream和 OutputStream是完全不同的概念,他更跟流沒有任何關係。它也不同於 StAX 對 XML解析的 Stream,也不是 Amazon Kinesis 對巨量資料實時處理的Stream。

JDK8 中的 Stream 是對集合(Collection)物件功能的增強,它藉助於lambda表示式,更優雅的表達風格,極大的提高程式設計效率和程式可讀性。它針對於對集合物件進行各種非常便利、高效的聚合操作,或者大批次資料操作。不多說,上用法。

二、Stream流實現與傳統方式實現對比

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

2.1、傳統方式實現

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

2.2、Stream流方式實現

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

三、Stream流的常用API

3.1、stream流的獲取

在Collection集合下,均有一個stream(),另一個即是用Stream的一個靜態方法 of() 實現。

上程式碼:

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()方式的實現
        List<String> list1 = new ArrayList<>();
        Stream<List<String>> stream4 = Stream.of(list1);
        //傳入可變陣列
        Stream<String> stream5 = Stream.of("1","2","3","4");
    }
}

3.2、forEach()

遍歷流中的物件

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

3.3、filter()

filter對流物件進行過濾操作

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

3.4、map()

map()是對集合中的物件進行對映的,將物件從一種型別轉換成另一種型別

package com.controller;
import java.util.ArrayList;
public class Aoo {
    public static void main(String[] args) {
        // 定義一個集合
        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()是對集合中的物件進行對映的,將物件從一種型別轉換成另一種型別
        list.stream().map(num -> Integer.parseInt(num));
    }
}

3.5、count()

count是對流資料統計的方法,但是count之後返回的是long型別,因此無法再進行流操作。

package com.controller;
import java.util.ArrayList;
public class Aoo {
    public static void main(String[] args) {
        // 定義一個集合
        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()對流資料進行統計
        System.out.println(list.stream().count());
    }
}
3.6、limit()

3.6、limit()

選取流資料的前多少條資料

package com.controller;
import java.util.ArrayList;
public class Aoo {
    public static void main(String[] args) {
        // 定義一個集合
        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() 選取流資料的前多少條資料
        list.stream().limit(2);
    }
}

3.7、skip()

跳過流資料的前多少條資料,該方法與limit()方法剛好相反

package com.controller;
import java.util.ArrayList;
public class Aoo {
    public static void main(String[] args) {
        // 定義一個集合
        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() 跳過流資料的前多少條資料
        list.stream().skip(2);
    }
}

3.8、concat()

Stream的靜態方法concat()實現對兩個流資料進行合併

package com.controller;
import java.util.ArrayList;
import java.util.stream.Stream;
public class Aoo {
    public static void main(String[] args) {
        // 定義一個集合
        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");
        // 定義一個集合
        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()實現對兩個流資料進行合併
        Stream.concat(list.stream(),list1.stream());
    }
}

四、總結

Stream 使用一種類似用 SQL 語句從資料庫查詢資料的直觀方式來提供一種對 Java 集合運算和表達的高階抽象。Stream API可以極大提高Java程式設計師的生產力,讓

程式設計師寫出高效率、乾淨、簡潔的程式碼。這種風格將要處理的元素集合看作一種流, 流在管道中傳輸, 並且可以在管道的節點上進行處理, 比如篩選, 排序,聚合等。

到此這篇關於Java Stream流零基礎教學的文章就介紹到這了,更多相關Java Stream流內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com