分享更有价值
被信任是一种快乐

Java Stream流式编程常见的坑有哪些

文章页正文上

本篇内容介绍了“Java Stream流式编程常见的坑有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Stream是Java8新增的一个接口,允许以声明性方式处理数据集合。Stream不是一个集合类型不保存数据,可以把它看作是遍历数据集合的高级迭代器(Iterator)。Stream操作可以像Builder一样逐步叠加,形成一条流水线。流水线一般由数据源+零或者多个中间操作+一个终端操作所构成。中间操作可以将流转换成另外一个流,比如使用filter过滤元素,使用map映射提取值。Stream与lambda表达式密不可分,本文默认你已经掌握了lambda基础知识。只能遍历(消费)一次。Stream实例只能遍历一次,终端操作后一次遍历就结束,再次遍历需要重新生成实例,这一点类似于Iterator迭代器。保护数据源。对Stream中任何元素的修改都不会导致数据源被修改,比如过滤删除流中的一个元素,再次遍历该数据源依然可以获取该元素。懒。filter, map 操作串联起来形成一系列中间运算,如果没有一个终端操作(如collect)这些中间运算永远也不会被执行。(1)使用指定值创建Stream实例(2)使用集合创建Stream实例(常用方式)(3)使用数组创建Stream实例(4)使用生成器创建Stream实例(5)使用迭代器创建Stream实例(6)使用IO接口创建Stream实例Stream接口中定义了很多操作,大致可以分为两大类,一类是中间操作,另一类是终端操作;(1)中间操作中间操作会返回另外一个流,多个中间操作可以连接起来形成一个查询。中间操作有惰性,如果流上没有一个终端操作,那么中间操作是不会做任何处理的。下面介绍常用的中间操作:map操作map是将输入流中每一个元素映射为另一个元素形成输出流。flatMap操作哪里?你预期是List, 返回却是List, 这是因为split方法返回的是String[]这个时候你可以想到要将数组转成stream, 于是有了第二个版本还是不对,这个问题使用flatMap扁平流可以解决,flatMap将流中每个元素取出来转成另外一个输出流filter操作filter接收Predicate对象,按条件过滤,符合条件的元素生成另外一个流。(2)终端操作终端操作将stream流转成具体的返回值,比如List,Integer等。常见的终端操作有:foreach, min, max, count等。foreach很常见了,下面举一个max的例子。假如有一个需求:过滤出年龄大于20岁并且分数大于95的学生。使用for循环写法:使用for循环会初始化一个临时list用来存放最终的结果,整体看起来不够优雅和简洁。使用lambda和stream重构后:使用filter和方法引用使代码清晰明了,也不用声明一个临时list,非常方便。(1)误区一:重复消费stream对象stream对象一旦被消费,不能再次重复消费。上述代码执行后报错:java.lang.IllegalStateException: stream has already been operated upon or closed(2)误区免费云主机、域名二:修改数据源在流操作的过程中尝试添加新的string对象,结果报错:注意:一定不要在操作流的过程中修改数据源。“Java Stream流式编程常见的坑有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注云技术网站,小编将为大家输出更多高质量的实用文章!

相关推荐: 2020年JavaScript开发人员必备的5项高薪技能是什么

这篇文章给大家介绍2020年JavaScript开发人员必备的5项高薪技能是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。本文转载自公众号“读芯术”(ID:AI_Discovery)开发人员的一生可以用两句话概括:计算器,以及学习新技…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册