安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

你OUT了吗,for双层循环可以使用stream方式替代

12月12日 孤小单投稿
  糟粕代码
  java8已经出了Stream流处理方式,但是实际业务开发时,大部分同学还是下意识的去写for双层循环。
  一眼看穿繁华这段代码写法就是典型的for双层循环,我们再细看业务逻辑是判断List所有对象元素中有无重复的,若有重复对象主键,则抛出业务异常。
  其实业务场景不复杂,那完全可以使用Stream流处理方式,那么大家还是使用for双层循环的原因是什么呢?是习惯,还是处于性能考虑呢?
  做个试验,验证看看试验场
  首先模拟个场景:班级里面的学生,学生与班级的匹配,检查学生是否真正是有班级的。先模拟学生类和班级类
  再搞10W的学生数量和班级数量,不是怀疑是性能吗?数量小了可不行
  搞一个for双层循环方式for双层循环的方式privatestaticvoiddoubleForMethod(ListStudentstudentList,ListNoClassnoClassList){现在用学生与班级进行匹配,如果是班级号一致,认为这个学生是本班级的for(inti0;istudentList。size();i){StudentstudentstudentList。get(i);for(intj0;jnoClassList。size();j){NoClassnoClassnoClassList。get(j);if(student。getClassesId()。equals(noClass。getClassId())){System。out。println(该学生:student。getStuId()是有班级的);}}}}
  再搞一个Stream流方式privatestaticvoidstreamMethod(ListStudentstudentList,ListNoClassnoClassList){把班级列表转成map,那么班级id就是唯一的idMapString,NoClassnoClassMapnoClassList。stream()。collect(Collectors。toMap(tt。getClassId(),tt));现在用学生与班级进行匹配,如果是班级号一致,认为这个学生是本班级的studentList。stream()。forEach(h{if(noClassMap。containsKey(h。getClassesId())){System。out。println(该学生:h。getStuId()是有班级的);}});}运行比较两者耗时情况
  最终结果是:for双层循环方式耗时:80438msStream流方式耗时:80ms
  同一个业务场景,二者处理结果相同,但耗时却是云泥之别,令人惊叹。Stream在背后做了什么?
  其实,我也不是很清楚,一起来学习吧。
  如果一上来就了解最底层Stream是怎么实现的,这完全是和自己作对;你丫学《C语言程序设计》的时候,有学for(inti0;i)是怎么完成遍历的吗!
  回答,肯定是没有呀。对一个知识的掌握,由浅入深,知其特性再探究原因,如果你非要一上来就看Stream源码,也行。我很期待哦,静静地看你表演。
  Stream的分类
  了解Stream原理之前,先要知道它的操作分类,因为Stream的操作分类就是实现高效迭代集合的原因之一。
  官方将Stream中的操作分为两大类:中间操作(Intermediateoperations)和终结操作(Terminaloperations)。中间操作只对操作进行了记录,即只会返回一个流,不会进行计算操作,而终结操作是实现了计算操作。
  中间操作又可以分为无状态(Stateless)与有状态(Stateful)操作,前者是指元素的处理不受之前元素的影响,后者是指该操作只有拿到所有元素之后才能继续下去。
  终结操作又可以分为短路(Shortcircuiting)与非短路(Unshortcircuiting)操作,前者是指遇到某些符合条件的元素就可以得到最终结果,后者是指必须处理完所有元素才能得到最终结果。
  我们通常还会将中间操作称为懒操作,也正是由这种懒操作结合终结操作、数据源构成的处理管道(Pipeline),实现了Stream的高效。Stream的特点数据流从一头获取数据源,在流水线上依次对元素进行操作,当元素通过流水线,便无法再对其进行操作,可以重新在数据源获取一个新的数据流进行操作;对Collection进行处理,一般会使用Iterator遍历器的遍历方式,这是一种外部迭代;而对于处理Stream,只要申明处理方式,处理过程由流对象自行完成,这是一种内部迭代,对于大量数据的迭代处理中,内部迭代比外部迭代要更加高效;Stream的性能
  那是不是Stream就能完全取代for方式,性能更优呢?也未必。
  根据官方效率数据显示:
  多核CPU服务器配置环境下,对比长度100的int数组的性能常规的迭代Stream并行迭代Stream串行迭代多核CPU服务器配置环境下,对比长度1。00E8的int数组的性能;Stream并行迭代常规的迭代Stream串行迭代多核CPU服务器配置环境下,对比长度1。00E8对象数组过滤分组的性能;Stream并行迭代常规的迭代Stream串行迭代单核CPU服务器配置环境下,对比长度1。00E8对象数组过滤分组的性能;常规的迭代Stream串行迭代Stream并行迭代建议多使用Stream吧
  按官方性能统计来看,使用Stream未必可以使得遍历性能更优,具体的要依赖数据量,即实际应用场景。
  不过,在我们平时的业务开发中,我建议还是多使用Stream方式。效率是写代码的考虑因素,但不是绝对因素,随着技术的发展,执行效率一定会随着硬件发展而快速提高;对于写代码的人来说,代码一定要以简洁为原则,损失一点效率,换来的是高可读的代码,我觉得是非常值得的。
  作者:桐言无忌
  链接:https:juejin。cnpost7057694629474336775
投诉 评论

有什么办公软件超级好用,却不被大众所知?感谢邀请。在日常工作中,比较好用的办公软件还是挺多的,至于是不是被大众所知,那就无从查起了,可以给楼主推荐几款。一、Everythingeverything是一款特……美国围堵和遏制中国,英国敢于对美国说不,批准中资收购芯片企业美国从2018年开始了对于中国的贸易战,除了对于中国众多商品加征特别关税之外,还对于中国的高科技企业进行了制裁,无论是特朗普政府还是拜登政府,都是试图在芯片领域与中国进行切割。……腾讯2021年营收5601亿元,人均月薪7。06万元鞭牛士3月24日消息,昨日,腾讯发布2021年业绩报告,总收入为5601亿元,首次突破5000亿元,同比增长16;实现净利润2,248。2亿元,相当于日赚6。16亿元,同比增长……高盛大规模增持阿里巴巴,中概互联网的高光时刻来临高盛公布三季度持仓,大规模增持阿里巴巴根据高盛提交的三季度持仓报告显示,截至9月30日,高盛加仓1747。60万股阿里巴巴,共持有4797。79万股,增持幅度高达57。2……699元!今年最便宜的魅族手机开卖,5000mAh电池48M尽管在去年底魅族官方就向外界宣布即将重启魅蓝手机战略的消息,且今年1月就发布了首发机型魅蓝10,然而硬是让粉丝等了快2个月,这款魅蓝手机才正式到来。就在近日,魅蓝10正式……宗教背景下人人皆罪人,而儒家文化背景下的圣贤和君子却近乎完美我是萨沙,我来回答。这就是基督教文明和儒教(注意不是儒家,有本质不同)文明最大的一个区别。说通俗点,就是人性本恶和人性本善论的区别。基督教认为,人性本恶,人出……Python其实很简单第十九章Pandas之Series与D19。1安装AnacondaAnaconda是Python的一个开源发行版本,它预装了丰富的第三方库,而且主要面向科学计算和数据分析,使用起来要比原版的Python更省时……你OUT了吗,for双层循环可以使用stream方式替代糟粕代码java8已经出了Stream流处理方式,但是实际业务开发时,大部分同学还是下意识的去写for双层循环。一眼看穿繁华这段代码写法就是典型的for双层循环,我……苹果66s相当于什么机型?感谢您的阅读!苹果6和苹果6S这两款手机相当于什么机型?如果说iPhone6和iPhone6S的话,他们可能在性能方面和现在的千元手机相比,都有一些相形见绌。……华为P50E手机今日1008准时开售华为在3月16举行了2022华为全屋智能及全场景新品春季发布会,余承东在此带来了华为P50E手机新品。华为P50E仅有两个版本,将于今日上午10:08准时开售:8GB12……什么牌子的燃气热水器质量好?要点一是选购与你家庭使用燃气种类一致的热水器。消费者要弄清你家庭使用是何种燃气气源。要点二是地理位置。因为南北温差及洗浴习惯不同,所以在选择的时候应注意。国产……我市一项目入选国家创新领航应用案例淄博日报记者杨秋云报道本报讯1月16日,记者从市工信局获悉,我市智洋创新基于人工智能的无信号区输电线路智能监测系统创新应用项目入选工信部2021年工业互联网平台创新领航应……
张捷评联想之联想金融多面看的几点不同看法小中见大,TCLMiniLED技术浅析新能源汽车浪潮会把大众丰田拍在沙滩上巴菲特还在用20美元的三星翻盖手机,库克我去教他用iPhon德勤与VMware联合推出战略分布式云业务微型电动车,即将告别两万元时代?超100款APP侵害用户权益面临下架网易七鱼SDK被点名发力数字感知2022旷视企业业务合作伙伴大会召开跳水警告!这几个系列机型接下来的价格可能暴跌华为P60Pro亮相,明年Q3季度发布,HMS3。05G,惊对标国际巨头转型电路保护解决方案提供商好利科技加快布局新能源安卓微信连升两级,拍一拍又出新花样,能拍出炸弹烟花听说背上金晨同款Cleo秒变直男斩都昌老爷庙(都昌老爷庙求什么灵)极简生活不再做的七件事电脑如何使用手机WIFI功能上网今天你被家长微信群轰炸了吗?百慕大三角等未解之谜,你知道的都有哪些(图)第一次做蛋糕清朝时期要遵循哪些礼仪男女之间行礼有什么区别在学雷锋的日子里《你我之间半透明》的读后感大全IE浏览器提示网页有错误,找不到元素怎么办快节奏生活,如何解放自己

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利