Java进阶教程:Streams API

Java进阶教程:Streams API

Stream是啥

  首先明确一点,Stream流和IO包里的InputStream、OutputStream是完全不同的概念!它是Java 8 中引入的新特性,Stream可以对集合元素进行各种高效、便利的聚合操作!

  聚合是个什么东东呢?

聚合在信息科学中是指对有关的数据进行内容挑选、分析、归类,最后分析得到人们想要的结果,主要是指任何能够从数组产生标量值的数据转换过程 [1]  。近年来随着大数据的发展,聚合技术已经广泛地应用于文本分析,信息安全,网络传输等领域。——《百度百科》

  到这里其实我们就理解了,Stream可以对集合中的元素进行筛选,返回我们想要的特定数据

不是迭代器

  Stream是筛选,既然是筛选,也就是说单向,不可往复,数据只能遍历一次,遍历过一次后即用尽了,就好比流水从面前流过,一去不复返。这个很类似我们迭代器!而和迭代器又不同的是,Stream 可以并行化操作,迭代器只能命令式地、串行化操作。顾名思义,当使用串行方式去遍历时,每个 item 读完后再读下一个 item。而使用并行去遍历时,数据会被分成多个段,其中每一个都在不同的线程中处理,然后将结果一起输出

  

 

创建一个流

  理解了流是什么东西之后!我们要来看一下要怎么创建一个流!

通过集合创建流

  我们再讲Stream是啥的时候就有说过

Stream可以对集合元素进行各种高效、便利的聚合操作!

  所以,通过集合创建流是天经地义的!

  Collection<String> collection = Arrays.asList("a","b","c");
  Stream<String> streamOfCollection = collection.stream();

通过数组创建流

  当然除了集合外,数组也是一种元素集合,也适用于流!

  Integer[] array = new Integer[]{1,2,3,4,5};
  Stream<Integer> streamOfArray = Arrays.stream(array);

  除此之外还有数值流、字符流、文件流、管道流等等,例举如下:

        //字符流
        Stream<String> streamOfString = Pattern.compile(", ").splitAsStream("a, b, c");
        //数值流
        IntStream intStream = IntStream.range(1, 3);
        LongStream longStream = LongStream.rangeClosed(1, 3);
        //文件流
        try {
            Path path = Paths.get("C:\\file.txt");
            Stream<String> streamOfStrings = Files.lines(path);
            Stream<String> streamWithCharset =
                    Files.lines(path, Charset.forName("UTF-8"));
        } catch (IOException e) {
            e.printStackTrace();
        }

  还有很多流,每种流的用法也有很多出于篇幅此处没办法一一列举,JDK文档有详尽说明。

 

拿它做什么

  委婉待续

  

参考资料

  • 待更新

 

posted @ 2020-01-18 15:25  子烁爱学习  阅读(334)  评论(0编辑  收藏  举报