JAVA Stream原理和常见操作

1.Stream原理

Stream是JAVA8开始的新的用法。Stream本意为流,Stream也确实如流一样,给操作带来了方便。

Stream的表现是:

1)提供一个特定类型的队列;

2)提供一系列操作,让队列拥有类似于SQL语句的操作。

Stream的原理或背后的基本支持是ForkJoinPool。ForkJoinPool主要用来使用分治法(Divide-and-Conquer Algorithm) 来解决问题,即把多个大任务分割为多个小型子任务。

但该任务的缺点是:如果子任务没有完成,整个总任务也没法进行完成和归并。

ForkJoinPool的解决方式是:

1)提供双向队列;

2)空的任务从别的队列的队尾中取数据,从而让任务均分和不空闲,也让整体任务进行得更快。

值得注意的是,ForkJoinPool提供了线程池,每个任务一个线程,并试图让不同线程绑定不同CPU,从而让整个任务更加高效。

新的Stream,也支持Lamba函数(匿名函数),从而让整个过程和类型无关。

2.常见操作

Stream的常见操作分为如下几类:

无状态:指元素的处理不受之前元素的影响;
有状态:指该操作只有拿到所有元素之后才能继续下去。
非短路操作:指必须处理所有元素才能得到最终结果; 
短路操作:指遇到某些符合条件的元素就可以得到最终结果,如 A || B,只要A为true,则无需判断B的结果。

可以进行的SQL语句如Select a, b from C where C.d = 2可以用如下语句实现:

list

        .stream

        .filter(e -> e.d == 2)

        .map(e -> {

                Class AB  = new Class();

                AB.a = e.a;

                AB.b = e.b;

                return AB;

                })

        .collect(Collectors.toList());

3.总结

Stream带来了便利,但依然不能完全替代SQL;比如,不能做到两个表的类似SQL的Join操作。必须自己写程序实现。

Stream其实提供了一系列操作方便的接口(API);如果想用,直接用即可,不用关心底层实现。这个结论,让笔者想起一个工程师前辈跟我说过的话:算法和数据结构的关系是什么,算法的具体实现,是依赖于数据结构的;但算法其实是提供一个通用的方法,让使用者不关心具体的数据结构和实现方式。

而计算机的性能越来越高,提供通用的方式,才是工程师最应该关心的事情。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值