Stream的一些小方法(一)

119 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

🍊作者简介:少年不想说话,努力长大

🍊往期回顾:

🍊近期目标:写完基础源码,点赞👍🏼、收藏⭐、留言📩

好久没说stream了,今天说说stream的某些用法;

findFirst方法

首先说下findFirst方法,为什么说这个方法呢,首先这是我今年刚用的觉得很棒,其次,它真的很快捷,它的应用场景,比如我们的数据是个List集合,但是呢我们又不需要返回所有数据,又不确定List中哪个Map对应的value值有值,这时候findFirst方法就派上用场了,我们可以先用stream流判断该value不为空的集合,然后取第一个就行,或者如果存在我们对应的集合数据我们接着判断是否有值就可以满足一定的逻辑关系了;我们看下伪代码

Optional<Map<String, Object>> optList = KnowMap.stream().filter(
                m -> StrUtil.isNotEmpty(m.get("xxx")))
                .findFirst();

这里我们用optional接收,看下optional类的定义,一个容器对象,可能包含也可能不包含非空值。如果存在值,isPresent() 将返回 true,而 get() 将返回该值。提供了依赖于包含值是否存在的其他方法,例如 orElse() (如果值不存在则返回默认值)和 ifPresent() (如果值存在则执行代码块)。这是一个基于值的类;在 Optional 的实例上使用身份敏感操作(包括引用相等 (==)、身份哈希码或同步)可能会产生不可预知的结果,应该避免;

接着我们判断下,这里是判断我们的optList是否为null;

if (optList.isPresent()) {
}

如果存在,我们可以通过get();来获取返回的对象如果对象是map则get它的key;如果是属性类则getxxx();

findAny方法

说了上面的findFirst方法,自然要说说和它一起的findAny方法了,findAny从它名字就能看出来这是返回任意一个对象,再看官方文档表明这个操作的行为是明确的非确定性的;可以自由选择流中的任何元素。这是为了在并行操作中实现最大性能;代价是对同一源的多次调用可能不会返回相同的结果。(如果需要稳定的结果,请改用 findFirst()。),总结就是想要稳定就用findFirst,如果想要快速接收不稳定行就用findAny,那怎么确定并行或串行呢;转流的过程中我们可以用Stream,还有也可以用.parallelStream()方法,前者串行(顺序流),后者并行;

好了,说了这么写,最后还是推荐findFirst,首先是场景没那么多并行场景,其次我之前有些过并行可能存在的一些问题,为了避免,所有推荐顺序流🥗🥗🥗;

结束结束,那就🛴🛴🛴

如果对你有所帮助

点个赞呗