高级用法

73 阅读1分钟

一、基本数据类型优化

我们之前用到的很多Stream的方法由于都使用了泛型。所以涉及到的参数和返回值都是引用数据类型。 image.png

我们操作的是整数小数,但是实际用的都是他们的包装类,例如使用map转为整数类型时,使用的为Integer包装类,在计算过程中,底层会先将Integer拆箱为int类型进行运算,结束后再把int类型装箱为Integer类型,这个过程会产生很多时间消耗。

所以为了让我们能够对这部分的时间消耗进行优化。Stream还提供了很多专门针对基本数据类型的方法。

例如:mapToInt,mapToLong,mapToDouble,flatMapToInt,flatMapToDouble等。

优化后:

使用mapToInt进行基本数据类型转换

image.png

二、并行流

当流中有大量元素时,我们可以使用并行流去提高操作的效率。其实并行流就是把任务分配给多个线程去完全。如果我们自己去用代码实现的话其实会非常的复杂,并且要求你对并发编程有足够的理解和认识。而如果我们使用Stream的话,我们只需要修改一个方法的调用就可以使用并行流来帮我们实现,从而提高效率。

parallel方法可以把串行流转换成并行流。

List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9));
list.stream().parallel()
        .forEach(num -> System.out.println(num + Thread.currentThread().getName()));

可以看到遍历结果由多个线程执行

image.png

*tream().parallel()可简写为parallelStream()

list.parallelStream()
        .forEach(num -> System.out.println(num + Thread.currentThread().getName()));