JDK8新特性之---Stream操作
java8中新增的特性旨在帮助程序员写出更好的代码,对核心类库的改进是最关键的一部分。对核心类库的改进主要包括集合类的API和新引入的流stream
流式写法最常见的就是对集合进行操作
判断一个操作是 惰性求值 还是 及早求值 很简单,看它的返回值。
如果返回值是Stream则是惰性求值;如果返回值是另一个数值或者为空,则是及早求值
此处我们先介绍下创建stream流的几种常见方式:
//第一种 基本方式
Stream stream = Stream.of("a","b","c");
//第二种 数组方式
String [] strArray = new String[] {"a", "b", "c"};
stream = Stream.of(strArray);
stream = Arrays.stream(strArray);
//第三种 集合方式
List<String> list = Arrays.asList(strArray);
stream = list.stream();
惰性求值 例子:
及早求值 例子:
另外常见的forEach()函数是terminal操作,因为执行它之后,Stream的元素被消耗掉了,你无法对一个Stream进行两次terminal运算,效果见下图,只打印一次。
流转化为其他数据结构例子如下图:
当然流的操作函数也很多,大家可以都尝试下,我这里提供一个例子,如下图:
最近看这个比较多,最后做个Stream总结;
1. 不是数据结构,它没有内部存储,它只是用操作管道从 source(数据结构、数组、 generator function、
IO channel)抓取数据
2. 它也绝不修改自己所封装的底层数据结构的数据。例如 Stream 的 filter 操作会产生一个不包含被过滤元
素的新 Stream,而不是从 source 删除那些元素
3. 所有 Stream 的操作必须以 lambda 表达式为参数
4. 惰性化,很多 Stream 操作是向后延迟的,一直到它弄清楚了最后需要多少数据才会开始,Intermediate
操作永远是惰性化的。
5. 当一个 Stream 是并行化的,就不需要再写多线程代码,所有对它的操作会自动并行进行的