- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java util stream 库简介
java.util.stream 库简介
Java SE 8 中主要的新语言特性是拉姆达表达式。可以将拉姆达表达式想作一种匿名方法 ;
像方法一样 ,拉姆达表达式 有带类型的参数、主体和返回类型。但真正的亮点不是拉姆达表达
式本身 ,而是它们所实现的功能。拉姆达表达式使得将行为表达为数据变得很容易 ,从而使开发
有更强表达能力、更强大的库成为可能。
Java SE 8 中引入的一个这样的库是java.ut il.st ream包 (St reams) ,它有助于为各种数据来源
上的可能的并行批量操作建立简明的、声明性的表达式。较早的 Java 版本中也编写过像
St reams 这样的库 ,但没有紧凑的行为即数据语言特性 ,而且它们的使用很麻烦 ,以至于没有人
愿意使用它们。您可以将 St reams 视为 Java 中第一个充分利用了拉姆达表达式的强大功能的库
,但它没有什么特别奇妙的地方 (尽管它被紧密集成到核心 J DK 库中 )。St reams 不是该语言的
一部分 — 它是一个精心设计的库 ,充分利用了一些较新的语言特性。
本文是一个深入探索java.ut il.st ream库的系列的第一部分。本期介绍该库 ,并概述它的优势
和设计原理。在后续几期中 ,您将学习如何使用流来聚合和汇总数据 ,了解该库的内部原理和性
能优化。
使用流的查询
流的最常见用法之一是表示对集合中的数据的查询。清单 1 给出了一个简单的流管道示例。
该管道获取一个在买家和卖家之间模拟购买的交易集合 ,并计算生活在纽约的卖家的交易总价值
。
清单 1. 一个简单的流管道
int t ot alSalesFro mNY
= txns.st ream()
.f ilt er(t t .get Seller().get A ddr().get St at e().equals(NY))
.mapTo Int (t t .get A mo unt ())
.sum();
f ilt er()操作仅选择与来自纽约的卖家进行的交易。mapTo Int ()操作选择所关注交易的交易
金额。最终的sum()操作将对这些金额求和。
这个例子非常容易理解 ,即使比较挑剔的人也会发现这个查询的命令版本 (f o r循环 )非常
简单 ,而且需要更少的代码行即可表达。为了体现流方法的好处 ,示例问题没有必要变得过于
复杂。流利用了这种最强大的计算原理 :组合。通过使用简单的构建块 (过滤、映射、排序、
聚合 )来组合复杂的操作 ,在问题变得比相同数据源上更加临时的计算更复杂时 ,流查询更可能
保留写入和读取的简单性。
作为来自清单 1 中的相同领域的更复杂查询 ,考虑 “打印与年龄超过 65 岁的买家进行交易的
卖家姓名 ,并按姓名排序。”以旧式的 (命令 )方式编写此查询可能会得到类似清单 2 的结果。
更多精彩攻略访问 1
清单 2. 对一个集合的临时查询
Set sellers = new HashSet ();
f o r (T xn t : txns) {
if (t .get Buyer().get A ge() = 65)
sellers.add(t .get Seller());
}
List so rt ed = new A rrayList (sellers);
Co llect io ns.so rt (so rt ed, new Co mparat o r() {
public int co mpare(Seller a, Seller b) {
ret urn a.get Name().co mpareTo (b.get Name());
}
});
f o r (Seller s : so rt ed)
Syst em.o ut .print ln(s.get Name());
尽管此查询比第一个查询稍微复杂一点 ,但很明显采用命令方法的结果代码的组织结构和可
读性已开始下降。读者首先看到的不是计算的起点和终点 ;而是一个
文档评论(0)