快速业务通道

java api接口篇(二)上 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

对照类似行,假设你要了解两个Map对象是否包含所有所有相同键的映射:

if (m1.keySet().equals(m2.keySet())) { ... } 

图来说,这是没必要的,因为后备Map的put和putAll提供了相同的功能。

假设你具有一个映射,代表一个属性-值对集合;以及两个sets, 表示要求的属性和允许的属性(允许的属性包括要求的属性)。下列代码可判定该属性映射是否符合那些限定条件,如果不符合,则打印详细的出错消息:

boolean valid = true; Set attributes = attributeMap.keySet(); if(!attributes.containsAll(requiredAttributes)) { Set missing = new HashSet(requiredAttributes); missing.removeAll(attributes); System.out.println("Missing required attributes: "+missing); valid = false; } if (!permissibleAttributes.containsAll(attributes)) { Set illegal = new HashSet(attributes); illegal.removeAll(permissibleAttributes); System.out.println("Contains illegal attributes: "+illegal); valid = false; } if (valid) System.out.println("OK");

假设你想了解由两个Map对象公用的所有键:

Set commonKeys = new HashSet(a.keySet()); commonKeys.retainAll(b.keySet());

类似的惯用程序使你可以获得公共值以及公共键-值对。要获得公共键-值对,则需格外小心; 因为结果Set的元素(即Map.Entry对象)在Map被更改后,可能是无效的。到目前为止,所有惯用程序都是"非破坏性的":它们不更改后备Map。下面是一些更改后备Map的例子。假设你要删除一个Map与另一个Map所共有的所有键-值对:

m1.entrySet().removeAll(m2.entrySet());

假设你要从一个Map中删除所有在另一个Map中具有映射的键:

m1.keySet().removeAll(m2.keySet());

java api接口篇(二)上(4)

时间:2010-12-24

当你在同样的批量操作中开始混合键和值时,发生了什么事情呢?假设你有一个称作managers的Map, 它将公司中的每个雇员与该雇员的经理相映射。我们对键和值对象的类型是不清楚的。这不要紧, 只要它们是相同的类型就可以了。现在,假设你要知道全部的"个体贡献者"是谁? (这是为不是经理的雇员所用的公司语言)。下面的一行程序准确地告诉你所要了解的东西:

Set individualContributors = new HashSet(managers.keySet()); individualContributors.removeAll(managers.values());

假设你要辞退直接向某些经理报告的雇员(我们称他为herbert):

Employee herbert = ... ; managers.values().removeAll(Collections.singleton(herbert));

请注意,这个惯用程序利用了Collections.singleton, 它是一个静态方法,可返回一个永恒的带有单一特定元素的Set。

一旦完成了这些工作,你就可能有了一帮雇员,他们的经理不再为公司工作(如果任何herbert的直接报告是他们自己的经理)。下列代码告诉你所有的他们的经理不再为公司工作的雇员:

Map m = new HashMap(managers); m.values().removeAll(managers.keySet()); Set slackers = m.keySet();

这个例子是一个小的技巧。首先,它作了一个Map的临时拷贝,然后又从这个临时拷贝中删除所有的经理值是初始Map中的键的项。记住这个初始Map包含一个为每一个雇员准备的项。于是,在临时Map中保留的项包含了初始Map中的经理值不再是雇员。在临时拷贝中的键则恰恰表示了我们正在寻找的雇员的所有项。如果你把这个例子多看看,你就应该全清楚了。如果还不清楚,该去拿一杯热气腾腾刚酿好的Java饮料了。

还有许多与本章中的惯用程序类似的例子,但要把它们全列出来则过于烦琐,也是不实际的,一旦你掌握了它的用法,你就很容易在你需要它的时候拿出正确

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号