Stream流的特點_只能使用一次

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

        //優化寫法
//        stream.filter(s -> s.startsWith("張")).forEach(s -> System.out.println(s));

        /**
         * Stream流屬於管道流,只能被消費(使用)一次
         * 第一個Stream流調用完畢方法,數據就會流轉到下一個Stream上,而這時第一個Stream流已經使用完畢,就會關閉了
         * 所以第一個Stream流就不能再調用方法了
         * IllegalStateException: stream has already been operated upon or closed
         */
        stream.forEach(s -> System.out.println(s));
    }
}

Stream流中的常用方法_map

映射:map

如果需要將流中的元素映射到另一個流中,就可以使用map方法。方法簽名:

java <R> Stream<R> map(Function<? super T,? extends R> mapper)

該接口需要一個Function函數式接口函數,可以將當前流中T類型數據轉換為另一種R類型的流

stream 循環demo_java

複習Function接口

此前我們已經學習過java.util.stream.Function函數式接口,其中唯一的抽象方法為:
R apply(T t);
這可以將一種T類型轉換稱為R類型,而這種轉換的動作,就稱為映射

基本使用:

package com.yang.Test.StreamStudy;

import java.util.stream.Stream;


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

        //優化寫法
        stream.map(s -> Integer.parseInt(s)).forEach(integer -> System.out.println(integer+5));
    }
}