我为什么要推荐用Stream语法
admin
2024-02-22 07:05:38
0

Stream是jdk1.8加入的新功能,在它的接口注释里是这么描述:Stream支持对一系列数据进行顺序和并行聚合操作。从形式上看,Stream以fluent的风格组织代码,让逻辑非常紧凑。但只是代码风格的差异,我相信就会人产生迷惑,直接用for循环处理集合数据,不也挺直观的?
的确,我开始也是这么认为,Stream只是内置一个迭代器,是对for结构的封装,两者没有本质的差别。随着深入理解,我发现它们体现的是两种不同的编程思想。

  • for结构是编程语言基本的语法,通过它可以处理任何需要循环遍历的场景,在循环里可以处理数据、发消息、查数据库。
  • Stream则是聚焦在对数据流的处理,里面会对数据进行计算、转换、过滤等。

所以我理解Stream设计的初衷是把关注点从逻辑处理转移到数据的变化上来,并且简化数据操作、降低并行聚合的难度。

下面举个例子来描述两者的差异。
比如,我们要从1-10的数字里,找到3的倍数,自然排序后,按照固定格式打印出来。
不使用Stream的代码

List list = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
List sorted = new ArrayList<>();
for (Integer num : list) {if (num % 3 == 0) {sorted.add(num);}
}
Collections.sort(sorted);
StringJoiner forStrJoiner = new StringJoiner(",", "{", "}");
for (Integer num : sorted) {forStrJoiner.add(String.valueOf(num));
}
System.out.println("forStr = " + forStrJoiner);

可以发现,需求描述很简洁,1.找到3的倍数,2.自然排序 3.按照固定格式打印。但是写出来的代码并不是和需求一一对应。
例如代码里的for循环结构是编程语法,不是需求的业务语言,在理解代码的业务含义时,属于噪音。

使用Stream的代码

String streamStr = list.stream().filter(it -> it % 3 == 0).sorted().map(it -> String.valueOf(it)).collect(Collectors.joining(",", "{", "}"));
System.out.println("streamStr = " + streamStr);

Stream的代码描述的很清晰,不仅仅是代码少了,而是Stream是按照<数据,操作名,回调函数>三元组来定义一个操作。Stream的操作和需求描述基本是一一对应,所以可读性很强。
【找到】 -> filter()
【自然排序】 -> sorted()
【格式化】 -> joining()

总结

在项目代码里,会有功能的业务处理逻辑,局部也会有数据处理逻辑。 Stream则是针对数据处理的场景,制定了常用的标准操作。 通过这些操作让我们更容易处理数据,包括写出更易理解的代码,更方便地使用多线程并行处理的能力。

相关内容

热门资讯

今天,科技股调整,医药、银行等... 今天,A股调整。截至收盘,上证指数下跌0.06%,深证成指下跌1.16%,创业板指下跌1.77%。 ...
数据驱动改进:神秘顾客报告的价... (深圳餐饮神秘顾客)(北京市场调研公司)(广州连锁餐饮门店巡检)很多餐饮企业做过神秘顾客调查,但做完...
原创 历... 前段时间,黄金价格又开始往上走,好像又到了可以"捡便宜"的时机,但好景不长,网上很快传出"中国黄金可...
蔚来在舟山成立新汽车销售公司 ... 天眼查显示,近日,舟山蔚乐萤汽车销售服务有限公司成立,法定代表人为曹佳君,注册资本1000万人民币,...
世界杯日报:挪威英格兰进8强 ... 北京时间7月6日消息,2026美加墨世界杯淘汰赛继续进行,在1/8决赛中,挪威2-1击败了巴西队闯进...
游戏结束,中方囤积7496万盎... 说个最近让全球资本市场都盯着看的事——中国的外汇储备正在经历一场静悄悄却意义深远的结构调整。截至今年...
狂飙!三星称2026年利润将超... 【CNMO科技消息】7月6日,CNMO科技从外媒获悉,三星电子半导体业务经营战略负责人金勇官(Kim...
央行3个月期买断式逆回购加量续... 文/刘佳 为保持银行体系流动性充裕,央行公告称,7月6日开展以固定数量、利率招标、多重价位中标方式开...
电子成了A股市值最大的行业:这... 2026年6月30日,A股上半年行情收官,留下一组极致分化的数字:申万一级行业里,电子上涨86.29...
纳斯达克上市前夜,海力士大连公... SK海力士计划于7月10日在美国纳斯达克上市,成为近期全球资本市场关注的焦点 投资时间网、标点财经...
光模块龙头,融资客大幅加仓,A... 来源:中国证券报 上周A股市场震荡分化。Wind数据显示,截至7月3日,A股市场融资余额报29807...
光年的盛夏,科技不转弯 (来源:莎解多资产) 7月的第一周,市场巨震。如果说6月科技在诸多利空之下逆势狂飙,FOMO资金等待...
中信证券:研发质量不断提升,创... 中信证券指出,2026年下半年中国创新药产业基本面稳步向好,核心来自研发质量提升、全球价值验证和盈利...
全链路透明化筑牢消费信任,王小... 近日,南方都市报湾财社主办的“品质・信任・心消费”2026信任消费新势力盛典于广州启幕。本次盛典汇聚...
突登A股人气榜第一!6年暴跌9... (来源:财闻) 2020年11月,中公教育股价冲上历史最高价,随后一路下跌,目前已连跌6年,且股价长...
云启购APP期货投资者亏损骗局...   云启购APP违规经营,非法期货交易!现在这些网上做白银铂金商品订购所谓的现货交易,实际是变相期货...
原创 楼... 本文为城市财经团队出品 01 | 楼市第一城易主 自2022年取代武汉坐上楼市第一城宝座的成都,今年...
九州订购APP贵金属期货投资被...   九州订购APP在抖音、快手、今日头条等平台,精心设计的投资广告铺天盖地。这些广告主打三大诱惑:“...
八方生财APP贵金属期货投资骗...   八方生财APP、每日淘金APP、小赢淘金APP、悟空订购APP、蜻蜓订购APP、斗金订购APP都...
“末日将至”!《大空头》原型化... 智通财经获悉,上周二,电影《大空头》的原型人物迈克尔·伯里(Michael Burry)刚刚亮出一系...