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文档有详尽说明。
拿它做什么
委婉待续
参考资料
- 待更新