七种武器:Collection 之 Google Guava
base
String
java String 即一个不可变的char数组
Splitter
String[] split = str.split(String regex);
Google Splitter的分隔符可以是单个的char,或者CharMatcher,或者字符串str,或者正则表达式的字符串patternStr,或者是一个Pattern,或者是固定length来分隔,分别有对应的 Factory 方法(on)来返回Splitter实例
另外还有trimResults和omitEmptyStrings来添加trim和去空操作。
最后,唯一的API,split(CharSequence seq)来split目标字符串(char序列)
Splitter.on(',').trimResults().omitEmptyStrings().split("foo, ,bar, quux,")
//["foo", "bar", "quux"]
Joiner
java string中有Split没Join,所以经常使用StringBuilder进行append,Joiner即是很好的替代。
Joiner joiner = Joiner.on("; ").skipNulls();
. . .
return joiner.join("Harry", null, "Ron", "Hermione");
CharMatcher
单个字符串的匹配器,看起来API很多,但在Introduction中介绍了其设计原则:
These represent a partial cross product of two notions:
(a) what's a "matching" character?
(b) what to do with those matching characters?
返回boolean类型的API用类匹配,返回int类型的API用来查找,返回String用来处理(retain, remove, replace, trim)
String seriesId = CharMatcher.DIGIT.or(CharMatcher.is('-')).retainFrom(input);
Function
对集合,经常要做的一个操作是将集合中的对象一一转换成另外的一个对象,这里需要map。另外一个操作是将其中某些元素剔除,需要Filter.
base package 中定义了Function,但很显然其用武之地在collection包中
Predicate
谓词是一种特殊的Function,其转换输出是一个boolean。
防守式编程(Defense programming使你的程序更健壮)中经常用到,assert是另外一种选择
if (count <= 0) { throw new IllegalArgumentException("must be positive: " + count); }
to be replaced with the more compact
checkArgument(count > 0, "must be positive: %s", count);
Equivalence
FinalizableReference
http://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html
关于Reference,本身似乎就让人迷惑。这里试着给出要点:
- reference对象和referent对象是两个东东
- 我们的目标是referent在需要时(比如内存不够/调用gc时,soft/weak)能被回收掉,避免出现OOM
- reference本身也是一个对象,往往被强引用,比如放在一个容器里。这时需要app来清除dead references(get返回null的reference)
- Reference queues 提供一种机制,通知referent的状态改变(可以被垃圾回收/已经被垃圾回收, weak_soft/Phantom),这种机制往往被用来释放resource资源,比如file handler
- 清除reference object 并不是回收reference object本身,而是释放reference object对referent的引用
Google的FinalizableReference提供finalizeReferent()来让app做一些清理工作,无须自己来显示维持Reference queue,并poll queue,调用清理方法。
参考链接
http://codemunchies.com/2009/10/beautiful-code-with-google-collections-guava-and-static-imports-part-1/
http://macrochen.javaeye.com/blog/737058
七种武器:Collection 之 Google Guava相关推荐
- 高级工程师必须精通的七种武器(摘录)
高级工程师必须精通的七种武器(摘录) 注:黑体是从 jiangjiayi的csdn博客中摘录,灰色字体是我同意,不懂或不同意的. 第一种武器:开发工具 至少熟练掌握两到三种开发工具的使用,这是程序员的 ...
- python枪械_Python的七种武器
君子生非异也,善假于物也. "物"能够延展英雄的能力.它是吕布的赤兔马,杨过的玄铁重剑,CS中的沙漠之鹰,曹操传中的凤凰羽衣."物"也可用以治愈英雄,例如张无忌 ...
- GIS就业参考系列之技术篇——七种武器
题记 从2007--2017,职场中第一个十年即将完成.十年足以摧毁一个人的样貌:十年可以见证一个时代的发展:十年你从匆匆那年转变为而立之年:不知道从毕业一直还在从事本专业的人有多少,不知道这是一种幸 ...
- ansible(七种武器)
ansible七种武器 第一种武器 Ansible命令,用于执行临时性的工作,也是我们之前主要学习的功能,必须掌握 第二种武器 Ansible-doc是Ansible模块文档说明,针对每个模块都有详细 ...
- 让 Python 代码更易维护的七种武器——代码风格(pylint、Flake8、Isort、Autopep8、Yapf、Black)测试覆盖率(Coverage)CI(JK)...
让 Python 代码更易维护的七种武器 2018/09/29 · 基础知识 · 武器 原文出处: Jeff Triplett 译文出处:linux中国-Hank Chow 检查你的代码的质 ...
- 揭密Oracle之 七种武器
揭密Oracle之 七种武器 第一章 搭建测试环境 vage 揭密Oracle之 七种武器 第一章 搭建测试环境 (揭密Oracle之七种武器第二章地址:DTrace语法:跟踪物理IO http:/ ...
- 程序员 :超越软件蓝领的七种武器
信息技术的发展时间虽然不长,但其爆炸式的发展速度使信息技术迅速覆盖社会和人类生活的各个角落.程序员们是这场信息化浪潮的见证者之一,更是其中的主要参与者,这是时代赋予每个程序员的机会和责任. 信息技术的 ...
- 成为 Linux 终端高手的七种武器
成为 Linux 终端高手的七种武器 2017-03-23 17:34:31 来源: 点击:0 inux 终端不仅是一个键入命令的地方.如若你能熟谙这些基础技巧,那么你会在绝大多数 Li ...
- 七种武器——.NET工程师求职面试必杀技
七种武器--.NET工程师求职面试必杀技 一..NET框架(七种武器之孔雀翎) 开发人员应该熟悉.NET FrameWork体系结构和基本原理,熟悉CLR(公共语言运行时)和MSIL(中间语言),熟悉 ...
- 百度云世界里的“七种武器”:PCS、BAE、Site App、ScreenX等
如果说去年百度世界的关键词是"百度新首页"的话,那么今年在研发者人群中,对百度世界最深的印象就是"七种武器",即在云的世界里,百度为开发者所提供的包括个人云存储 ...
最新文章
- windows环境下的zookeeper安装
- 【十大经典数据挖掘算法】Naïve Bayes
- python中常见的流程_Python面试中最常见的25个问题-结束
- 数据库:30种SQL语句优化,进阶必备!
- Git之submodule使用总结
- 设计模式学习笔记五——Prototype模式
- VMware HA与VMotion的部署与搭建
- mysql 复制 错误_Mysql复制错误error
- python深度学习第一讲——用python写神经网络
- Dart基础第13篇: 泛型、泛型方法 、泛型类、泛型接口
- 40.服务器搭建准备
- android基础--PreferenceActivity
- kindle paperwhite3 拆机越狱
- 我是如何自学C语言的(一个菜鸟的学习路)
- 再次回归 IDEA 的部分修改记录...
- RPA机器人如何调用USB SERVER
- 看中国魅力女强人 访格力电器总裁董明珠
- centos服务器磁盘清理
- 堪萨斯州立大学计算机科学,美国留学:2019计算机专业最新排名
- PHP 导出 Excel 换行不显示