一、Stream是什么?
Stream是一个高级迭代器,它不是数据结构,不能存储数据。它可以用来实现内部迭代,内部迭代相比平常的外部迭代,它可以实现并行求值(高效,外部迭代要自己定义线程池实现多线程来实现高效处理)、惰性求值(中没有终止操作,中间操作是不会执行的)、短路操作(拿到正确的结果就返回,不需要等到整个过程完成之后)等
二、初步应用
1.代码示例
代码如下(示例):
public class StreamDemo1 {
public static void main(String[] args) {
int[] num = {1,2,3};
int sum = 0;
/**
* 平常的外部迭代,如果数据量非常大,不符合效率要求,则要自己去定义线程池,实现多线程操作
*/
for (int i: num) {
sum += i;
}
System.out.println(sum);
System.out.println("======================");
/**
* 流编程实现内部迭代,不关注怎么去做,只关注要得到的结果
*/
sum = IntStream.of(num).sum();
System.out.println(sum);
System.out.println("======================");
/**
* map为中间操作,返回的是Stream,sum为终止操作不返回Stream(终止操作和中间操作的判断依据)
*/
sum = IntStream.of(num).map( x -> x * 2).sum();
System.out.println(sum);
System.out.println("=======================");
/**
* 有终止操作,所以这里的中间操作会执行
*/
sum = IntStream.of(num).map(StreamDemo1::doubleNum).sum();
System.out.println(sum);
System.out.println("=======================");
/**
* 没有终止操作,所以这里因为Stram的惰性求值得原因,这里的中间操作并不会执行
*/
IntStream.of(num).map(StreamDemo1::doubleNum);
}
private static int doubleNum(int i) {
System.out.println("中间操作执行");
return i * 2;
}
}
2.结果
代码执行结果如下
6
======================
6
======================
12
=======================
中间操作执行
中间操作执行
中间操作执行
12
=======================
总结
Stram流是jdk8的一个新特性,是一种高效迭代器,用于产生数据,并高效处理数据。