JDK8之findAny和findFirst

简介: JDK8之findAny和findFirst

写在前面


JDK8出世后,很多编程方式发生了一些变化,比如函数式编程,Lambda表达式,这些都使得我们的编程更有效率。


其中,JDK8中的Stream相关API,大大的提高了我们在实际开发中的效率,原本使用十行代码,先如今可以用一行代码,而且更高的效率来代替。


最近正在学习Stream,所以特此记录一些有必要的问题,希望对大家有所帮助。


问题


今天我们的问题就是Stream流中的findAny和findFirst有着什么样的区别?


在工作中如果使用不当,随着项目运行时间的加长,会突然爆发一些很麻烦的问题。遇见疑惑,解决疑惑,才是根本所在。


解答


首先,这两个方法都是用来找出并返回所查询列表中的第一个元素对象,这两者又有些差异。


让我们来看一下平时我们使用的代码示例。


具体应用代码如下:


List<String> list0 = Arrays.asList("纪晓岚", "和珅", "黄三", "张三", "张四","黄四");
List<String> list1 = Arrays.asList("纪晓岚", "和珅", "黄三", "张三", "张四","黄四");
Optional<String> findFirst = list0.Stream().filter(s -> s.startsWith("张")).findFirst();
Optional<String> fidnAny = list1.Stream().filter(s -> s.startsWith("张")).findAny();
System.out.println(findFirst.get()); 
System.out.println(fidnAny.get()); //会随机地打印出Jack/Jill/Julia


第一行的输出,无论执行多少次,都只会打印出“张三”。


第二行的输出,则是会随机的打印出张三、张四。


其中的findAny方法,是会随机返回一个元素,所以如果存在多个值的话,使用此方法时,不能保证多次返回的元素的一致性。


而findFrist方法,就是切实的返回集合中的第一个元素对象了。


总结


经过我们的例子来看,findAny方法和findFirst方法的区别很明显,就是前者随机查出匹配的元素,而后者是只拿取最小集合索引的元素,也就是依次遍历的第一个元素对象。


相关文章
|
前端开发 应用服务中间件 nginx
Javaweb之前端工程打包部署的详细解析
6 打包部署 我们的前端工程开发好了,但是我们需要发布,那么如何发布呢?主要分为2步: 前端工程打包 通过nginx服务器发布前端工程 6.1 前端工程打包
377 0
Javaweb之前端工程打包部署的详细解析
|
Java 数据安全/隐私保护
Springboot拓展之整合邮件 JavaMail的使用与实操
Springboot拓展之整合邮件 JavaMail的使用与实操
436 0
|
Java Linux 开发工具
IDEA中git提交前如何关闭code analysis以及开启格式化代码
【10月更文挑战第12天】本文介绍了在 IntelliJ IDEA 中关闭代码分析和开启代码格式化的步骤。关闭代码分析可通过取消默认启用检查或针对特定规则进行调整实现,同时可通过设置 VCS 静默模式在提交时跳过检查。开启代码格式化则需在 `Settings` 中配置 `Code Style` 规则,并通过创建 Git 钩子实现提交前自动格式化。
4526 3
|
SQL Java 数据库连接
深入解析@MapperScan注解:简化MyBatis接口与映射器的关联
在Java持久化领域,MyBatis是一个广泛使用的ORM(对象关系映射)框架,用于将数据库中的数据映射到Java对象中。MyBatis的核心概念是SQL映射器(Mapper),它定义了数据库操作的方法。为了简化Mapper接口与映射器的关联,MyBatis提供了`@MapperScan`注解。本文将深入探讨`@MapperScan`注解的作用、用法,以及在MyBatis应用中的应用场景。
3207 0
|
存储 Java 测试技术
阿里巴巴java开发手册
这篇文章是关于阿里巴巴Java开发手册的整理,内容包括编程规约、异常日志、单元测试、安全规约、MySQL数据库使用以及工程结构等方面的详细规范和建议,旨在帮助开发者编写更加规范、高效和安全的代码。
|
Java 数据库连接 mybatis
mybatis判断list不为空
mybatis判断list不为空
444 0
|
监控 算法 Java
Java面试题:如何在Java中触发一次Full GC?请详细解释垃圾回收机制和知识
Java面试题:如何在Java中触发一次Full GC?请详细解释垃圾回收机制和知识
808 4
|
Java API 调度
从Spring Cloud 开始,聊一聊微服务架构的设计与实战
随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。
1564 1
从Spring Cloud 开始,聊一聊微服务架构的设计与实战