JDK1.8 Arrays.Stream()用法和介绍

        其实大部分同学在学习Java的时候一般都是自学,看某站视频或者其他渠道等等,但其实这些视频太早了,包括我自己也一样基本上接触不到JDK的很多API,之所以想写这个是因为我每天更新的leetcode的题解里面总是有大佬会用这些,一开始确实不知道怎么用,照葫芦画瓢用着也很开心,直到最近在看ES6新特性发现再不学就晚了,其实真的很方便。

        6月7日每日一题,在我动态中,感兴趣的同学可以去看看。

JDK1.8 Arrays.Stream()用法和介绍_第1张图片 

在这里不讨论这道题如何做,简单说一下这道题涉及二分查找法,那么初始上界是piles的最大值,如果是平时那么我们的做法是:

JDK1.8 Arrays.Stream()用法和介绍_第2张图片

 如果我们用Arrays.Stream()的做法是

 简简单单一句代码,可不要小看了这一行代码,现在我们大部分在IDE进行开发,假如离开了IDE,给你的txt文档或者更简陋一点的编辑器你可以吗?难道在面试的时候我们还可以用IDE进行面试吗?

那么Array.Stream()到底是什么呢?我们来看看IDEA中给出的源码解释

JDK1.8 Arrays.Stream()用法和介绍_第3张图片

 Array.Stream()返回的是一个元素序列,且支持顺序和并行的聚合操作。其实我们可以把它理解为包装类,其实和对于Int来说,元素序列类型为OptionalInt,包装类为Integer,它们在各自的领域各司其职,只不过Int类型和Integer类型可以自动转化。所以在上面我们还需要调用getAsInt()函数来进行转化Int类型。那么肯定大家会觉得麻烦只是简简单单的一些计算,为什么要用这个,请看下面:

        JDK1.8 Arrays.Stream()用法和介绍_第4张图片

 输出结果:

 这里做的事情是找出字符串数组中唯一的字符,如果是正常来做的话要写增强For循环然后用Set集合存储,在写法上肯定很啰嗦,并且很容易出错,在这里我们只用简单的调用API函数即可,这样是不是觉得方便多了。如果你熟练的话可以保证速度也可以保证准确率。尤其是在算法题中,For循环和数据结构的使用会让代码看着很乱。

下面介绍一下其他的API:

JDK1.8 Arrays.Stream()用法和介绍_第5张图片

输出:

 

 这两个API在算法题中出现的频率相当高,一个是求和,一个是map操作,求和就不说了,map的意思是对数组中的每一个元素进行操作,这里用了lambda给每个元素进行加1.

JDK1.8 Arrays.Stream()用法和介绍_第6张图片

 Reduce函数,里面接收一个方法,这里用lambda写了一个方法,first指的是上一次Reduce执行的结果,second指的是数组中的下一个元素。也就是说1+2=3作为first,second为3,3+3=6作为first,4为second这样迭代下去,一开始first为0。这个方法见到的和用到的都比较少,当然还有很多其他好用的API,有兴趣的小伙伴可以自己去看一看。

最后想说的是,在IDEA中看不到这些函数的源码,但是看到Map和Reduce一定会想到大数据,且JDK文档中说Stream()元素序列可以并发执行,对于map函数是不是意味着多线程,如果是的话那么处理速度上一定会呈几何倍的速度增长,且本来取名为Stream意味着流管道,大数据中用的就是pipeline后续文章会来考证。

小伙伴们如果有想法的可以在评论区留言!!

感谢收藏评论和学习。

你可能感兴趣的:(java,java,开发语言)