一、流是什么
1、流提供一种让我们可以在比集合更高的概念级别上指定计算的数据视图,通过使用流,我们可以说明想要完成什么任务,而不是说明如何去实现它。“做什么而非怎么做”。
二、主要特点
1、流不储存元素。
2、流的操作不会修改其数据源。
3、流的操作是尽可能惰性执行。
三、流创建的方式
1、静态方法创建,借助:stream.of();
2、创建一个空流,借助:stream.empty();
3、创建一个常量流,借助:stream.generate();
4、创建一个随机流,借助:stream.generate();
5、创建一个种子函数流,将借助:stream.iterate(种子,函数);
6、创建一个正则表达式分割流,借助:Pattern.compile("\\PL+").splitAsStream(集合参数);
四、源代码实例
package com.com.yt;
import java.io.File;
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;
public class CreatingStreams {
/*
* 这个方法设置了输出单词的
* */
public static <T> void show(String title, Stream<T> stream){
//设置输出单词的个数
final int SIZE=10;
//
List<T> firstElements =stream.limit(SIZE+1).collect(Collectors.toList());
System.out.print(title+":");
for (int i = 0;i<firstElements.size();i++){
if(i>0) System.out.print(",");
if (i<SIZE) System.out.print(firstElements.get(i));
else System.out.print("...");
}
System.out.println();
}
public static void main(String[] args)throws IOException {
//设置txt文件的路径。
Path path = Paths.get("G:/testtxt/alice.txt");
//创建一个文件对象,设置编码格式为:utf_8的编码格式。
String contents = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
//设置切割方式,传递给show方法一个contents文件对象。
Stream<String> words= Stream.of(contents.split("\\PL+"));
//调用自己编写的show方法,传递一个String的标题提示,第二个参数是产生一个流,stream方法将任何集合转换为一个流。
show("words",words);
//一、创建一个:静态方法创建流。
Stream<String> song = Stream.of("gently","down","the","stream");
show("song",song);
//二、创建一个:不包含任何元素的空流。
Stream<String> silence = Stream.empty();
show("silence",silence);
//三、创建一个:常量值的流
Stream<String> echos = Stream.generate(()->"Echo");
show("echos",echos);
//创建一个:创建一个随机数的流。
Stream<Double> randoms = Stream.generate(Math::random);
show("randoms",randoms);
//创建一个:种子函数流。
Stream<BigInteger> integers = Stream.iterate(BigInteger.ONE,n->n.add(BigInteger.ONE));
show("integers",integers);
//创建一个:正则表达式分割流
Stream<String> wordsAnotherWay = Pattern.compile("\\PL+").splitAsStream(contents);
show("wordsAnotherWay",wordsAnotherWay);
try (Stream<String> lines = Files.lines(path,StandardCharsets.UTF_8)){
show("lines",lines);
}
}
}