您的位置:首页 > 编程语言 > Go语言

七种武器:Collection 之 Google Guava

2010-08-20 17:31 295 查看

base

String

javaString即一个不可变的char数组

Splitter

String[]split=str.split(Stringregex);

GoogleSplitter的分隔符可以是单个的char,或者CharMatcher,或者字符串str,或者正则表达式的字符串patternStr,或者是一个Pattern,或者是固定length来分隔,分别有对应的Factory方法(on)来返回Splitter实例

另外还有trimResultsomitEmptyStrings来添加trim和去空操作。

最后,唯一的API,split(CharSequenceseq)来split目标字符串(char序列)

Splitter.on(',').trimResults().omitEmptyStrings().split("foo,,bar,quux,")

//["foo","bar","quux"]

Joiner

javastring中有Split没Join,所以经常使用StringBuilder进行append,Joiner即是很好的替代。

[code]Joinerjoiner=Joiner.on(";").skipNulls();
...
returnjoiner.join("Harry",null,"Ron","Hermione");

CharMatcher

单个字符串的匹配器,看起来API很多,但在Introduction中介绍了其设计原则:

Theserepresentapartialcrossproductoftwonotions:
(a)what'sa"matching"character?
(b)whattodowiththosematchingcharacters?

返回boolean类型的API用类匹配,返回int类型的API用来查找,返回String用来处理(retain,remove,replace,trim)

StringseriesId=CharMatcher.DIGIT.or(CharMatcher.is('-')).retainFrom(input);

Function

对集合,经常要做的一个操作是将集合中的对象一一转换成另外的一个对象,这里需要map。另外一个操作是将其中某些元素剔除,需要Filter.

basepackage中定义了Function,但很显然其用武之地在collection包中

Predicate

谓词是一种特殊的Function,其转换输出是一个boolean。

防守式编程(Defenseprogramming使你的程序更健壮)中经常用到,assert是另外一种选择

if(count<=0){
thrownewIllegalArgumentException("mustbepositive:"+count);
}

tobereplacedwiththemorecompact

checkArgument(count>0,"mustbepositive:%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来清除deadreferences(get返回null的reference)

Referencequeues提供一种机制,通知referent的状态改变(可以被垃圾回收/已经被垃圾回收,weak_soft/Phantom),这种机制往往被用来释放resource资源,比如filehandler

清除referenceobject并不是回收referenceobject本身,而是释放referenceobject对referent的引用

Google的FinalizableReference提供finalizeReferent()来让app做一些清理工作,无须自己来显示维持Referencequeue,并pollqueue,调用清理方法。

参考链接

http://codemunchies.com/2009/10/beautiful-code-with-google-collections-guava-and-static-imports-part-1/

http://macrochen.javaeye.com/blog/737058
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: