Java8函数式编程入门 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

并行化流

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();

输出结果:采用并行流操作方式时间是串行操作的时间一半不到。

query

使用函数式编程,并行化流操作统计一个数字列表的和。