并行化流
Java8中可以在接口不变的情况下,将流改为并行流,这样很自然地使用多线程进行集合中的数据处理。并行化操作流只需要改变一个方法调用,如果已经是一个Stream对象,调用它的parallel方法就能让其拥有并行操作的能力;如果想从一个集合类创建一个流,调用parallelStream就能立即获得一个拥有并行能力的流。
简单的例子,统计1~1000000内所有的质数的数量。
//判断一个数是否为质数,是返回true,不是返回false
private static boolean isPrime(int number) {
int x = number;
if (x < 2) {
return false;
}
for (int i = 2; i <= Math.sqrt(x); ++i) {
if (x % i == 0) {
return false;
}
}
return true;
}
使用函数式编程统计给定范围内所有的质数。(串行操作)
long count = IntStream.range(1,1000000).filter(Test::isPrime).count();
使用函数式编程统计给定范围内所有的质数。(并行操作)
//parallel()方法得到一个并行流,在并行流上进行过滤
long count = IntStream.range(1,1000000).parallel().filter(Test::isPrime).count();
输出结果:采用并行流操作方式时间是串行操作的时间一半不到。
使用函数式编程,并行化流操作统计一个数字列表的和。