java8 stream findany_java8中的findAny与findFirst

java8中开启了流式编程。

今天我们来聊聊流失编程中的findAny和findFirst。

766c827ce6ca67fef3e6056f5bc3f22a.png

01findAny与findFirst二者的功能

从二者的名字我们就能看出他们大概的功能了。

findFirst是从流中找出第一个元素。而findAny则是从流中找出任意一个元素。

是这样吗?我们来实际使用验证一下吧。

fb3b08d982121f9c984f5e0692adb1c2.png

两个方法中一样的集合,分别调用执行了findAny和findFirst。为了验证执行的结果,对每个方法都做了10次循环。

让我们来看看执行后输出的结果是什么。

0e5387d7fda09f074d6db60b17cf9d50.png

怎么输出的结果一样呢?

findFirst我们可以理解,就是找第一个元素。每次输出的内容一样没有问题。

可是findAny呢,不是说是找任意一个元素吗,怎么每次输出的也是一样啊。

大家有没有注意到对“names”这个集合做流化处理使用的是“stream”,这是串行流。如果我们的“names”是有序的,那findAny的任意一个都是第一个了。

既然有串行流,那我们来试试并行流吧。

8e6f107f8937003bd68958e2844c397a.png

大家注意看,我在代码中用红线做了标志,流已经从“stream”改成了“parallelStream”。

我们再来执行一下,看看这次的结果会不会是any,任意一个元素了。

7bbd9510efdd1115b1f92e2042f04f97.png

这次的执行结果输出的不再都是第一个元素了,而是任意的一个元素了。有兴趣的朋友可以自己试着执行看看,每次执行的结果都可能会不同。

02为什么要有串行流和并行流

这里说到了串行流和并行流,那为什么要有串行流和并行流呢。

串行就是一个线程在处理业务,而并行流是会有多个线程来并发处理业务。

能够有多个线程同时处理业务的话,肯定是能更快速地完成业务流程。

但是对于一些对于执行顺序有强要求的,或者是并发可能会因为资源共享或争夺引发问题场景就不适合用并行流了。

那并行流是不是真的能提示效率,快速完成业务流程呢。

让我来试试吧。

74c5a755c0d93f356468d49921af0afb.png

e53059cf3e1d1a259e19dd997a5efb02.png

示例代码中分别对串行流的findAny和并行流的findAny循环调用了100次(因为次数少不太能看出来效果)。然后分别对耗时做了一下输出。

那结果会是什么样的。

下面就来揭晓了。

eddf1c0e3da033acbec7220f4d57912a.png

从结果来看,串行流的findAny执行耗时是并行流的findAny执行耗时的3倍左右。

好了,今天我们聊了java8中的findAny与findFirst,也顺便了解了下并行流和串行流。希望对看到本文的朋友有所帮助。

新人朋友自己学习java的话可以看看下面这本书哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值