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的简单性,并使它们接收和返回集合。 这样您就可以完成上述行为。

解决方案是根据filtermapreduce类型函数从更高层次看待数据处理管道,并尝试围绕流对其进行建模。

但为什么?

将流视为无限

如今,我们的集装箱很小,我们希望他们能充分利用它们的资源。 小型容器(如果连续运行)可以处理无限制的数据流。 如果我们想象所有数据都是潜在的无限流,并设计我们的软件使用流技术来避免将所有数据都存储到内存中,则会发生两件事:

  • 我们将所有情况下的流的最大内存需求优化为尽可能低
  • 我们必须正确使用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

到无限(溪流)和超越!相关推荐

  1. DeepMind首席科学家:比起机器智能,我更担心人类智能造成的灾难

      视学算法报道   编辑:David [新智元导读]DeepMind 首席研究科学家David Silver的明星气质与他安静.谦逊的性格形成了鲜明对比.这位让AI自学下围棋玩游戏的强化学习大牛认为 ...

  2. 20+顶尖高校同时开打《王者荣耀》!实际上是一场科研battle,你能信?

    金磊 假装发自 王者峡谷 量子位 报道 | 公众号 QbitAI 不是吧,不是吧. 一群学霸聚集在一起,竟然是为了打<王者荣耀>?! 而且还是来自清北.中科院.浙大等20余所顶级学府的那种 ...

  3. 腾讯TencentOS 十年云原生的迭代演进之路

    蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. 导语 TencentOS Server (又名 Ten ...

  4. 校运会计算机专业口号,校运动会口号(精选80条)

    校运动会口号(精选80条) 无论是身处学校还是步入社会,大家都接触过比较经典的口号吧,口号是供口头呼喊的有纲领性和鼓动作用的简短句子.你还在找寻优秀经典的口号吗?下面是小编为大家整理的校运动会口号(精 ...

  5. 寒门能出贵子的关键在哪里

    跟上海的朋友微信聊天,她直接打了电话过来,我们聊了161分钟. 聊到孩子教育,她说虽然上海的孩子学习成绩不一定都特别好,但是见识和眼界还是很好的.她亲戚家一个弟弟二十五六,学的电子专业,让去上海苏州找 ...

  6. 人机的根本区别:Free will

    [人有机无者众,关键自由意志]  自由意志(Free will)是哲学里面的一个专业概念,理解为意识选择做什么的决定.也就是意志的主动性.     自由意志(Free will)无一个为各方所认可的定 ...

  7. 梦入神机:星河大帝2

    "这个思路简直发人深省!"江离心中震撼:"自己制造货币,损耗灵魂和精神,制造出来的货币,不停的加强整个系统的力量,货币的制造权掌握在每一个人的手中,不至于滥发,而且整个网 ...

  8. 双鱼男最需要找什么样的女人做老婆?

    双鱼男最需要找什么样的女人做老婆? 2011年10月11日 在爱情当中~没有好不好~只有爱不爱~只要是真心相爱的人都要彼此珍惜~否则后悔是没用的!不管找哪个星座都是一样~不要把你的感情或者婚姻寄托在星 ...

  9. 实体店为什么要做小程序

    实体店为什么要做小程序 如果要让我来回答这个问题,那么我的答案会是:因为你的客户在用微信啊!但很多店老板,似乎认为这个理由还不够充足,那好,我今天就跟大家详细的聊一下. 一.大势所趋 这四个字听起来特 ...

  10. 阿里云基础产品技术月刊 2018年12月 1

    [关注最新商用产品技术] TOP1 阿里云弹性计算块存储产品"ESSD云盘"获2018年度云存储产品金奖 12月11日,在第十四届中国存储与数据峰会(Data & Stor ...

最新文章

  1. 【Kotlin】接口 ( 声明 | 实现 | 接口方法 | 接口属性 | 接口覆盖冲突 | 接口继承 )
  2. 最小生成树之克鲁斯卡尔(kruskal)算法详解代码实现
  3. js实现螺旋矩阵算法
  4. 厉害了,Apache架构师们遵循的 30 条设计原则
  5. android 记步功能实现,Android计步(简单Demo)
  6. Oracle -- rollup函数
  7. 如何快速把kux格式转换成mp4
  8. 高斯日记python实现
  9. manjaro 亮度调节
  10. (筆記) 如何在字串中從指定字元抓到指定字元(pointer版)? (C/C++) (C)
  11. 李彦宏:有人弄死其他对手 自己也没好结果
  12. docker使用-p参数映射端口失败
  13. xp计算机用户名和密码忘记了怎么办,忘记XP的用户名和密码怎么办?
  14. 【Excel 教程系列第 6 篇】制作斜线表头
  15. bzoj1375 双调路径
  16. Android Studio 实战干货例程
  17. vba CAD提取图元属性
  18. 并发编程系列之并发编程的认识
  19. urlencoded格式化
  20. 使用Java故意消耗Cpu和内存的代码

热门文章

  1. 2018CCPC吉林赛区(重现赛)补题部分——F线段树待补
  2. 简单多边形三角化(暴力)
  3. codeforces D.MADMAX 动态规划、记忆化搜索
  4. ACID中C与CAP定理中C的区别
  5. 怎样增强MyEclipse的代码自动提示功能
  6. 《金色梦乡》金句摘抄(二)
  7. SpringCloud Openfeign
  8. JS中函数和变量声明的提升
  9. React向对象数组进行赋值
  10. javaweb---简易邮件发送