七种武器: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实例

另外还有trimResultsomitEmptyStrings来添加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

原创粉丝点击