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,调用清理方法。