JAVA创建流的各种方式

本文介绍了在Java中创建流的多种方式,包括Java.util.stream.Stream提供的静态方法,如of、empty、generate等;使用Spliterators、Arrays、Pattern、Files、StreamSupport和Iterable的相关方法;以及Scanner的tokens方法。这些方法适用于不同的场景,如创建有限或无限流,从数组、文件、模式匹配等来源获取流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

  1. static Stream of​(T… values) 返回其元素为指定值的顺序有序流。

  2. static Stream empty() 返回空序列 Stream。

  3. static Stream generate​(Supplier<? extends T> s)
    返回无限顺序无序流,其中每个元素由提供的 Supplier生成。

  4. static Stream iterate​(T seed, Predicate<? super T> hasNext, UnaryOperator next) 返回通过将给定的 next函数迭代应用于初始元素 Stream生成的顺序有序 Stream ,条件是满足给定的 hasNext谓词。

  5. static Stream iterate​(T seed, UnaryOperator f)
    返回有序无限连续 Stream由函数的迭代应用产生 f到初始元素 seed ,产生 Stream组成的 seed ,f(seed) ,f(f(seed))等

  6. static Stream ofNullable​(T t) 返回包含单个元素的顺序 Stream (如果为非null),否则返回空 Stream 。

java.util.Splterators (JDK8)

java.util.Arrays (JDK2)

  1. static Stream stream​(T[] array, int startInclusive, int endExclusive) 返回指定数组的指定范围作为其源的顺序Stream 。

java.util.regex.Pattern (4)

  1. Stream splitAsStream​(CharSequence input) 围绕此模式的匹配从给定输入序列创建流。

java.nio.file.Files(JDK7)

  1. static Stream lines​(Path path, Charset cs) 从文件中读取所有行作为 Stream 。
  2. static Stream lines​(Path path) 从文件中读取所有行,如 Stream 。

java.util.stream.StreamSupport (JDK8)

  1. static Stream stream​(Spliterator spliterator, boolean parallel) 创建一个新的串行或并行 Stream从 Spliterator

java.lang.Iterable (JDK8)

java.util.Scanner

  1. public Stream tokens()

以上内容均取自JAVA核心技术卷II,希望可以对大家有一定的帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值