需要的几个类及方法介绍:
java.util.stream.Stream:
- static < T > Stream < T > of(T…values) : 产生一个元素为给定值的流;
- static < T > Stream < T > empty(): 产生一个不包含任何元素的流;
- static < T > Stream< T > generate(Supplier< T > s): 产生一个无限流,它的值是通过反复调用s构建的;
- static < T >Stream< T >iterate(T seed ,UnartOperator< T > f) : 产生一个无限流,它的元素包含种子,在种子上调用f产生的值,在前一个元素上调用f产生的值;
java.util.Arrays
- static < T > Stream< T > stream(T[] array,int start,int end): 产生一个流,它的元素是由数组中指定范围内的元素构成的;
java.util.regex.Pattern
- **Stream < String > splitAsStream(CharSequence input): **产生一个流,它的元素是输入中由该模式界定的部分;
java.nio.file.Files
- static Stream< String > lines(Path path)
- static Stream< String > lines(Path path,Charset cs)
产生一个流,它的元素是指定文件中的行,该文件默认字符集为UTF-8,或者为指定字符集cs
各种流创建:
package IOdemo.IOExercise;
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 {
Path path= Paths.get("E:\\javaSource2\\javacod\\20181121\\fos.txt");
String contents=new String(Files.readAllBytes(path),StandardCharsets.UTF_8);
//可变参数创建流
Stream<String> words=Stream.of(contents.split("\r\n")); //
show("words",words);
Stream<String> song=Stream.of("可变参数","传多少都行","和上面一样多");
//创建一个不包含任何元素的流
Stream<String> empty=Stream.empty();
//创建无限流
Stream<String> echos=Stream.generate(()->"常量流");
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);
//按照某个正则表达式来分割contents对象,
Stream<String> wordsAnotherWay= Pattern.compile("//PL") //通过什么方式分割
.splitAsStream(contents);
show("wordsAnotherWay", wordsAnotherWay);
try{
//指定文件的行创建流,静态方法
Stream<String> lines=Files.lines(path,StandardCharsets.UTF_8);
show("lines",lines);
}catch(IOException e){
e.printStackTrace();
}
}
}