Java8学习笔记系列:
一、什么是Stream?
Stream API借助Lambda表达式,提供串行和并行两种模式进行汇聚操作,并行模式能够充分利用多核处理器的优势,使用fork/join来拆分任务和加速处理过程。
如下所示:
@Test
public void example1(){
final List<String> stringList = Arrays.asList("Tom","Jack","Alice","Lina","Pony");
//串行流
long count1 = stringList.stream()
.filter(s -> {
System.out.println(Thread.currentThread().getId() + "==" + Thread.currentThread().getName());
return s.length() > 3;
})
.count();
System.out.println(count1);
//并行流
long count2 = stringList.parallelStream()
.filter(s -> {
System.out.println(Thread.currentThread().getId() + "==" + Thread.currentThread().getName());
return s.length() > 3;
})
.count();
System.out.println(count2);
}
二、Stream的构成
流由三部分构成:数据源、中间操作、终端操作,每次转换时原有的Stream对象不变,返回一个新的Stream对象(可以多次转换),这就允许对其操作像链条一样排列,变成一个管道。
1、中间操作与终端操作的区别
① 中间操作
返回一个新的Stream。中间操作都是惰性的,它们不会对数据源执行任何操作,仅仅是创建一个新的Stream。在终端操作执行之前,数据源的遍历不会开始。
② 终端操作<