设为首页 收藏本站
查看: 489|回复: 0

[经验分享] 开源工具 — Apache Commons Collections

[复制链接]

尚未签到

发表于 2017-1-1 11:10:44 | 显示全部楼层 |阅读模式
开源工具系列文章:
      Apache Commons Lang(1):http://ray-yui.iteye.com/blog/1953020
      Apache Commons Lang(2):http://ray-yui.iteye.com/blog/1958319
      Apache Commons BeanUtils:http://ray-yui.iteye.com/blog/1961451
      Apache Commons Collections:http://ray-yui.iteye.com/blog/2021484
      Apache Commons IO:http://ray-yui.iteye.com/blog/2023034


       程序=算法+数据结构,所以基本开源组织无论是Spring,Apache等都有他们各自对Collections的扩展,而这些扩展有时候能帮助到我们业务上的问题


public class TestMain {
public static void main(String[] args) {
/*
* Bag 是Collection的其中一种实现,使用起来也像List,
* 但它能容纳重复的元素,与List的最大区别是他提供了重复元素的統計功能,
* 但却剥夺了获取某一元素的功能(get方法),以下例子为统计集合中元素个数
*/
Bag bag = new HashBag(Arrays.asList("Hello", "World", "Wolrd", "Hello"));
// 增加3个Hello
bag.add("Hello", 3);
// bag没有get方法,只有getCount
bag.getCount("Hello");
// 可以使用uniqueSet方法返回不重复的Set
bag.uniqueSet();

/*
* BidiMap,是双向Map,可以通过key找到value,
* 也可以通过value找到key,需要注意的是BidiMap
* 当中不光key不能重复,value也不可以。
*/
BidiMap bidiMap = new DualHashBidiMap();
bidiMap.put("Hello", "World");
bidiMap.put("Hello1", "World1");
bidiMap.get("Hello"); // <--通过key获取value
bidiMap.getKey("World1");// <--通过value获取key

/*
* MultiMap 单个key指向多个对象,就是单个key可以对应多个value,
* 在put或remove时和普通Map没有区别,但当get时将返回多个value,
* 所以返回一个collections,利用MultiMap,我们就可以很方便的往 一个
* key上放数量不定的对象,也就实现了一对多,在3.2.1版本中MultiHashMap已被废除,
* 请使用MultiValueMap
*/
MultiMap multiMap = new MultiValueMap();
multiMap.put("Hello", "World");
multiMap.put("Hello", "World1");
multiMap.put("Hello", "World2");
// worldList[World,World1,World2]
List<String> worldList = (List<String>) multiMap.get("Hello");

/*
* LazyMap.类似与Hibenrate的懒加载,在声明的时候并不会创建,
* 而是在使用(get)的时候,才创建集合的内容,返回Factory的返回值
* 实现懒加载,有LazyList与LazyMap对应
*/
Map lazy = LazyMap.decorate(new HashMap(), new Factory() {
@Override
public Object create() {
return "World";
}
});
String hello = (String) lazy.get("Hello");
}
}


      Apache commons中还有ListUtils,MapUtils等工具类,但笔者并没有使用过,有兴趣的读者可自行参考API,笔者认为,在面向对象开发当中,数据不应该再依赖集合类来组织,笔者曾经见过List<Map<String,Map<String,Object>>>这样的数据结构声明,笔者有莫名的冲动想在旁边注释一句WTF,有考虑过别人阅读代码的感受吗?能否抽象出类来组织你需要的数据?所以我们不应该过份的依赖数据结构来组织数据,特别在面向对象的开发当中

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-322389-1-1.html 上篇帖子: apache之DSO[转载] 下篇帖子: Windows+Python+Apache+wsgi
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表