1.流的创建

可以用Collection接口的stram方法将任何集合转换为一个流。如果你有一个数组,可以使用静态Stream.of方法。
Stream<String> words = Stream.of(contents.split(","))
of方法具有可变长参数,因此可以构建具有任意数量引元的流:
String<String> song = Stream.of("aaa", "bbb", "ccc");
使用Array.stram(array, from. to)可以从数组中位于from(包括)和to(不包括)的元素创建一个流。
为了创建不包含任何元素的流。可以使用静态的Stream.empty方法:
Stream<String> silence = Stream.empty();
Stream接口有两个用于创建无限流的静态方法。generate方法会接受一个不包含任何引用元的函数(一个Supplier<T>接口的对象)。无论何时,只要需要一个流类型的值,该函数就会调用以产生这样的一个值。我们可以像下面这样获得一个常量值的流:
Stream<String> echos =Stram.generate(() -> "Echo");
或者引用
Stream<Double> randoms = Stream.generate(Math::random);
为了产生无限序列,例如0,1,2,3 。。。,可以使用iterate方法,他会接受一个"种子"值,以及一个函数(UnaryOperation<T>),并且会反复地将该函数应用到之前的结果上。
Stream<BigInteger> itegers = Stream.iteger(BigInteger.ZERO, n -> n.add(BigInteger.ONE));
该序列中的第一个元素是种子BigInteger.ZERO,第二个元素是f(seed),即1(作为大整数),下一个元素是f(f(seed)),即2.
在JavaAPI中有大量方法都可以产生流。如,Pattern类有一个solitAsStream方法,它会按照某个正则表达式来分隔一个CharSequence对象。可以使用下面的语句来将一个字符串分割为一个个的单词:
Stream<String> words = Pattern.compile("\\PL+").splitAsTream(contents);
静态的Files.lines方法返回一个包含文件所有行的Stream:
try (Stream<String> lines = Files.lines(path)) {
    process lines
}
运行程序如下所示:
package com.fl.www;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;


/**
 * @author : FL
 * @Classname : com.fl.www.CStream
 * @Version :
 * @date : 2019-08-02 16:17
 * @describe :
 */
@Slf4j
public class CStream {
    public static <T> void show(String title, Stream<T> stream) {
        final int size = 10;
        List<T> firstElements = stream.limit(size + 1).collect(Collectors.toList());
        log.info(title + ":");
        for (int i = 0; i < firstElements.size(); i++) {
            if (i > 0) {
                log.info(",");
            }
            if (i < size) {
                log.info(firstElements.get(i).toString());
            } else {
                log.info(".....");
            }
        }
    }

    public static void main(String[] args) throws IOException {
        Path path = Paths.get("E:\\job\\MavenTest\\src\\main\\java\\resource.txt");
        String arrStr = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);

        Stream<String> stringStream = Stream.of(arrStr.split("\n"));
        show("stringSream", stringStream);

        Stream<String> song = Stream.of("aaa", "bbb", "ccc");
        show("songs", song);

        Stream<String> silence = Stream.empty();
        show("empty", silence);

        Stream<String> echo = Stream.generate(() -> "Echo");
        show("Echo", echo);

        Stream<Double> randoms = Stream.generate(Math::random);
        show("randoms", randoms);

        Stream<BigInteger> bigIntegerStream = Stream.iterate(BigInteger.ZERO, n -> n.add(BigInteger.ONE));
        show("integers", bigIntegerStream);

        Stream<String> wordsAnother = Pattern.compile("\n").splitAsStream(arrStr);
        show("wordsAnother", wordsAnother);

        try(Stream<String> lines = Files.lines(path, StandardCharsets.UTF_8)) {
            show("lines", lines);
        }
    }
}
执行结果
2019-08-01 10:15:26 [main] INFO  CRUDExample - 开始查询数据。。。
2019-08-01 10:15:26 [main] INFO  CRUDExample - 结束操作...
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - stringSream:
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 致命毒液

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 一路向西

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 张建声

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 喜剧之王(国语)

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 周星驰

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 聊斋金瓶梅

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 午马

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 流浪地球

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 屈楚萧

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - .....
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - songs:
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - aaa
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - bbb
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ccc
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - empty:
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - Echo:
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - Echo
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - Echo
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - Echo
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - Echo
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - Echo
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - Echo
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - Echo
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - Echo
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - Echo
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - Echo
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - .....
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - randoms:
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 0.9283820636483764
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 0.9612830001216989
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 0.24824872516278118
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 0.6731556142018678
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 0.4594423973507742
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 0.19395617319087333
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 0.01983112181509028
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 0.6167447007604158
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 0.4637077729727006
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 0.5505174768954472
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - .....
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - integers:
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 0
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 1
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 2
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 3
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 4
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 5
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 6
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 7
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 8
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 9
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - .....
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - wordsAnother:
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 致命毒液

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 一路向西

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 张建声

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 喜剧之王(国语)

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 周星驰

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 聊斋金瓶梅

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 午马

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 流浪地球

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 屈楚萧

2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - .....
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - lines:
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 致命毒液
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 一路向西
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 张建声
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 喜剧之王(国语)
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 周星驰
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 聊斋金瓶梅
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 午马
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 流浪地球
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - 屈楚萧
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - ,
2019-08-02 16:59:47 [main] INFO  com.fl.www.CStream - .....
java.util.stream.Stream 8
  • static <T> Stream<T> of(T...values):产生一个元素给定值的流
  • static <T> Stram<T> empty():产生一个不包含任何元素的流
  • static <T> Stream<T> iterate(T seed, UnaryOperator<T> f):产生一个无限流,他的元素包含种子,在种子上调用f产生的值、在前一个元素上调用f产生的值
java.util.Arrays 1.2
  • static <T> Stram<T> stream(T[] array, int startInclusive, int endExclusive) 产生一个流,他的元素是由数组中指定范围内的元素构成的。
java.util.regex.Pattern1.4
  • Stream<String> splitAsStream(CharSequence input):产生一盒六,他的元素是输入中由该模式界定的部分
java.nio.file.Files7
  • static Stream<String> lines(Path path) 
  • static Stream<String> lines(Path path, CharSet cs):产生一个流,他的元素是指定文件中的行,改文件的字符集为cs
java.util.function.Supplier<T> 
  • T get():提供一个值。