Java进阶教程:Streams API
Stream是啥
首先明确一点,Stream流和IO包里的InputStream、OutputStream是完全不同的概念!它是Java 8 中引入的新特性,Stream可以对集合元素进行各种高效、便利的聚合操作!
聚合是个什么东东呢?
聚合在信息科学中是指对有关的数据进行内容挑选、分析、归类,最后分析得到人们想要的结果,主要是指任何能够从数组产生标量值的数据转换过程 [1] 。近年来随着大数据的发展,聚合技术已经广泛地应用于文本分析,信息安全,网络传输等领域。——《百度百科》
到这里其实我们就理解了,Stream可以对集合中的元素进行筛选,返回我们想要的特定数据。
不是迭代器
Stream是筛选,既然是筛选,也就是说单向,不可往复,数据只能遍历一次,遍历过一次后即用尽了,就好比流水从面前流过,一去不复返。这个很类似我们迭代器!而和迭代器又不同的是,Stream 可以并行化操作,迭代器只能命令式地、串行化操作。顾名思义,当使用串行方式去遍历时,每个 item 读完后再读下一个 item。而使用并行去遍历时,数据会被分成多个段,其中每一个都在不同的线程中处理,然后将结果一起输出。
Stream的构成
当我们使用一个流的时候,通常包括三个基本步骤:
→ 获取一个数据源(source)
→ 数据转换
→执行操作获取想要的结果
每次转换原有 Stream 对象不改变,返回一个新的 Stream 对象(可以有多次转换),这就允许对其操作可以像链条一样排列,变成一个管道。就像下图这样:
创建一个流
导包的时候一定要注意 import java.util.stream.Stream; 接着,数组和集合都可以构造流!
String[] arr = new String[]{"a","b","c","d"}; List<String> list = new ArrayList<>(Arrays.asList(arr)); //构造流 Stream stream = Stream.of(list); Stream stream1 = Arrays.stream(arr); Stream stream2 = list.stream(); //数值流的构造 IntStream.of(1,2,3).forEach(System.out::println); IntStream.range(1,3).forEach(System.out::println);
未完待续
原文地址:https://www.cnblogs.com/MrSaver/p/12209149.html