七种武器:Collection 之 Google Guava
来源:互联网 发布:java电商项目经验 编辑:程序博客网 时间:2024/04/30 10:41
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
- Google Guava学习之Immutable Collection
- Google的Guava之Collection升华
- Google Guava Collection实例
- 八十年代之七种武器
- 程序员之七种武器
- Redis之七种武器
- Redis之七种武器
- Linux网络安全之“七种武器”
- .NET框架之七种武器
- 软件工程需求分析之七种武器
- CUDA优化之七种武器
- 学术会议高手速成之七种武器
- 学术会议高手速成之七种武器
- 学术会议高手速成之七种武器
- 项目小结之七种武器
- 学术会议高手速成之七种武器
- Firefox七种武器之firebug
- RegQueryValueEx函数返回234错误解决方法
- 重写Ext.MessageBox.confirm中文按钮名称
- 彻底搞定C指针---指向指针的指针
- DAY 5
- CSS常用技巧介绍
- 七种武器:Collection 之 Google Guava
- 深入理解c#中的lock
- js 复制到剪贴板 火狐
- 在Windows中获取指定目录的API函数SHGetSpecialFolderPath
- Timer类的schedule使用方法
- c#多线程调用有参数的方法
- 2010/8/20
- 移动网关 HTTP 无法直接一次返回结果的处理
- java(ireport+jasperreport)创建报表