到无限(溪流)和超越!
Java允许您处理集合或流中的数据。 将流视为将一个集合转换为另一个集合的技术非常容易。 这可能会导致一些相当随意的代码,在该代码中,流数据被重复收集到某种类型的集合中,作为整体集合传递,然后再进行更多处理。
对于6个元素,谁在乎!
例:
// imaginary input List<String> list = asList( "Foo" , "Bar" , "Baz" ); // conversion and sending List<String> bs = list.stream() .filter(item -> item.startsWith( "B" )) .collect(toList()); List<Wrapped> wrapped = bs.stream() .map(Wrapped:: new ) .collect(toList()); sendWrappedItems(wrapped.stream());
上面有一个代码气味,它是流的不断收集和重新流式传输,大多数人可能会注意到这一点,并且如果这只是一种方法,则会删除一些临时列表。
大多数人会。 我见过人们不这样做。
但是,如果上述方法使用子例程来处理事物,则很容易优化子例程的API的简单性,并使它们接收和返回集合。 这样您就可以完成上述行为。
解决方案是根据filter , map和reduce类型函数从更高层次看待数据处理管道,并尝试围绕流对其进行建模。
但为什么?
将流视为无限
如今,我们的集装箱很小,我们希望他们能充分利用它们的资源。 小型容器(如果连续运行)可以处理无限制的数据流。 如果我们想象所有数据都是潜在的无限流,并设计我们的软件使用流技术来避免将所有数据都存储到内存中,则会发生两件事:
- 我们将所有情况下的流的最大内存需求优化为尽可能低
- 我们必须正确使用Streaming API,最后得到更简洁的代码,因为Stream API的声明性方面有助于描述数据转换中发生的事情。 在此过程中,我们甚至可能丢失了一些可怕的临时变量……
上面的代码将变为:
// imaginary input List<String> list = asList( "Foo" , "Bar" , "Baz" ); // conversion and sending sendWrappedItems(list.stream() .filter(item -> item.startsWith( "B" )) .map(Wrapped:: new ));
翻译自: https://www.javacodegeeks.com/2019/11/to-infinity-streams-and-beyond.html
到无限(溪流)和超越!相关推荐
- DeepMind首席科学家:比起机器智能,我更担心人类智能造成的灾难
视学算法报道 编辑:David [新智元导读]DeepMind 首席研究科学家David Silver的明星气质与他安静.谦逊的性格形成了鲜明对比.这位让AI自学下围棋玩游戏的强化学习大牛认为 ...
- 20+顶尖高校同时开打《王者荣耀》!实际上是一场科研battle,你能信?
金磊 假装发自 王者峡谷 量子位 报道 | 公众号 QbitAI 不是吧,不是吧. 一群学霸聚集在一起,竟然是为了打<王者荣耀>?! 而且还是来自清北.中科院.浙大等20余所顶级学府的那种 ...
- 腾讯TencentOS 十年云原生的迭代演进之路
蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. 导语 TencentOS Server (又名 Ten ...
- 校运会计算机专业口号,校运动会口号(精选80条)
校运动会口号(精选80条) 无论是身处学校还是步入社会,大家都接触过比较经典的口号吧,口号是供口头呼喊的有纲领性和鼓动作用的简短句子.你还在找寻优秀经典的口号吗?下面是小编为大家整理的校运动会口号(精 ...
- 寒门能出贵子的关键在哪里
跟上海的朋友微信聊天,她直接打了电话过来,我们聊了161分钟. 聊到孩子教育,她说虽然上海的孩子学习成绩不一定都特别好,但是见识和眼界还是很好的.她亲戚家一个弟弟二十五六,学的电子专业,让去上海苏州找 ...
- 人机的根本区别:Free will
[人有机无者众,关键自由意志] 自由意志(Free will)是哲学里面的一个专业概念,理解为意识选择做什么的决定.也就是意志的主动性. 自由意志(Free will)无一个为各方所认可的定 ...
- 梦入神机:星河大帝2
"这个思路简直发人深省!"江离心中震撼:"自己制造货币,损耗灵魂和精神,制造出来的货币,不停的加强整个系统的力量,货币的制造权掌握在每一个人的手中,不至于滥发,而且整个网 ...
- 双鱼男最需要找什么样的女人做老婆?
双鱼男最需要找什么样的女人做老婆? 2011年10月11日 在爱情当中~没有好不好~只有爱不爱~只要是真心相爱的人都要彼此珍惜~否则后悔是没用的!不管找哪个星座都是一样~不要把你的感情或者婚姻寄托在星 ...
- 实体店为什么要做小程序
实体店为什么要做小程序 如果要让我来回答这个问题,那么我的答案会是:因为你的客户在用微信啊!但很多店老板,似乎认为这个理由还不够充足,那好,我今天就跟大家详细的聊一下. 一.大势所趋 这四个字听起来特 ...
- 阿里云基础产品技术月刊 2018年12月 1
[关注最新商用产品技术] TOP1 阿里云弹性计算块存储产品"ESSD云盘"获2018年度云存储产品金奖 12月11日,在第十四届中国存储与数据峰会(Data & Stor ...
最新文章
- 【Kotlin】接口 ( 声明 | 实现 | 接口方法 | 接口属性 | 接口覆盖冲突 | 接口继承 )
- 最小生成树之克鲁斯卡尔(kruskal)算法详解代码实现
- js实现螺旋矩阵算法
- 厉害了,Apache架构师们遵循的 30 条设计原则
- android 记步功能实现,Android计步(简单Demo)
- Oracle -- rollup函数
- 如何快速把kux格式转换成mp4
- 高斯日记python实现
- manjaro 亮度调节
- (筆記) 如何在字串中從指定字元抓到指定字元(pointer版)? (C/C++) (C)
- 李彦宏:有人弄死其他对手 自己也没好结果
- docker使用-p参数映射端口失败
- xp计算机用户名和密码忘记了怎么办,忘记XP的用户名和密码怎么办?
- 【Excel 教程系列第 6 篇】制作斜线表头
- bzoj1375 双调路径
- Android Studio 实战干货例程
- vba CAD提取图元属性
- 并发编程系列之并发编程的认识
- urlencoded格式化
- 使用Java故意消耗Cpu和内存的代码