JAVA创建流的各种方式
在代码后有API归档
import java.io.IOException;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
import java.util.Iterator;
import java.util.List;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
/**
* @author chen
* @data 2020-07-29 - 20:10
*/
public class CreatingStream {
public static <T> void show(String title, Stream<T> stream){
final int SIZE = 10;
//Stream<T> limit(long maxSize) 返回由此流的元素组成的流,截断长度不超过 maxSize。
List<T> firstElement = stream.limit(SIZE + 1).collect(Collectors.toList());
System.out.print(title + ": ");
for(int i = 0; i < firstElement.size(); i++){
if(i > 0) {System.out.print(",");}
if(i < SIZE) {
System.out.print(firstElement.get(i));
}else{
System.out.print("...");
}
}
System.out.println();
}
public static void main(String[] args) throws IOException {
Path path = Paths.get("/路径");
String contents = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
Stream<String> words = Stream.of(contents.split("\\PL+"));
show("words", words);
Stream<String> song = Stream.of("gently", "down", "the", "stream");
show("song", song);
Stream<Object> empty = Stream.empty();
show("empty", empty);
Stream<String> generate = Stream.generate(() -> "Echo");
show("generate", generate);
Stream<Double> generate1 = Stream.generate(Math::random);
show("generate1", generate1);
Stream<BigInteger> iterate = Stream.iterate(BigInteger.ONE, n -> n.add(BigInteger.ONE));
show("iterate", iterate);
Stream<String> wordsAnotherWay = Pattern.compile("\\PL+").splitAsStream(contents);
show("wordsAnotherWay", wordsAnotherWay);
try(Stream<String> lines = Files.lines(path, StandardCharsets.UTF_8)){
show("lines", lines);
}
Iterable<Path> iterable = FileSystems.getDefault().getRootDirectories();
Stream<Path> stream = StreamSupport.stream(iterable.spliterator(), false);
show("stream", stream);
Iterator<Path> iterator1 = Paths.get("/路径").iterator();
final Stream<Path> stream1 = StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator1, Spliterator.ORDERED), false);
show("stream1", stream1);
}
}
Java.util.stream.Stream (JDK8)
-
static Stream of(T… values) 返回其元素为指定值的顺序有序流。
-
static Stream empty() 返回空序列 Stream。
-
static Stream generate(Supplier<? extends T> s)
返回无限顺序无序流,其中每个元素由提供的 Supplier生成。 -
static Stream iterate(T seed, Predicate<? super T> hasNext, UnaryOperator next) 返回通过将给定的 next函数迭代应用于初始元素 Stream生成的顺序有序 Stream ,条件是满足给定的 hasNext谓词。
-
static Stream iterate(T seed, UnaryOperator f)
返回有序无限连续 Stream由函数的迭代应用产生 f到初始元素 seed ,产生 Stream组成的 seed ,f(seed) ,f(f(seed))等 -
static Stream ofNullable(T t) 返回包含单个元素的顺序 Stream (如果为非null),否则返回空 Stream 。
java.util.Splterators (JDK8)
java.util.Arrays (JDK2)
- static Stream stream(T[] array, int startInclusive, int endExclusive) 返回指定数组的指定范围作为其源的顺序Stream 。
java.util.regex.Pattern (4)
- Stream splitAsStream(CharSequence input) 围绕此模式的匹配从给定输入序列创建流。
java.nio.file.Files(JDK7)
- static Stream lines(Path path, Charset cs) 从文件中读取所有行作为 Stream 。
- static Stream lines(Path path) 从文件中读取所有行,如 Stream 。
java.util.stream.StreamSupport (JDK8)
- static Stream stream(Spliterator spliterator, boolean parallel) 创建一个新的串行或并行 Stream从 Spliterator
java.lang.Iterable (JDK8)
java.util.Scanner
- public Stream tokens()
以上内容均取自JAVA核心技术卷II,希望可以对大家有一定的帮助。