Precondition
关于这部分的检查抛出异常方法,也是平时写代码检查外部请求参数要有意识的几个点:
- checkArugment 和 checkState, 这2个都是判断参数是否为true,但是抛出的Exception不一样,一般是带有业务逻辑的检查。
- checkNotNull,这个就是null的检查了。
- checkElementIndex、checkPositionIndex,检查集合是否越界。
- java的异常分为两大类:CheckedException 和 UncheckedException,前者是寄希望上游能作出相应的catch执行补救逻辑,相应地CheckedException要提供更多信息给上游方;后者的发生一般上游是无能为力的,只能打印异常信息定位具体原因。
- 要对finally的使用有意识,finally代码块保证了即使程序发生异常也是必须执行的逻辑。
优化了Object的相关方法
- Objects.equals 能比较null对象了,另外jdk7也提供了该方法。
- MoreObjects.toStringHelper 键值对的方式打印toString。
- ComparisonChain 按对象的基本属性比较结果优先级来比较对象
对集合排序的工具类 Ordering
相关使用方式参考 http://www.cnblogs.com/peida/p/Guava_Ordering.html
Propagation
根据异常类型条件,继续向外抛出异常。
能获取root cause,所有的cause,stackTrace的string形式
immutable集合
转换集合成immutable,就是复制一份成immutable对象
例如,ImmutableSet.copyOf(collection)、ImmutableSet.of(elements)、或者是两种形式的组合ImmutableSet.<XXX>builder().addAll(collection).add(element).build()
copyOf不仅能转换成immutable集合,还能转换集合的类型
新集合
MultiSet 允许存在重复元素的Set,但不像List保证顺序,提供了一系列关于元素个数增删改查的Api。
SortedMultiSet实现,提供了对元素排序,方便统计某个区间内元素的个数。MultiMap,允许一个key对应多个value。
相比 Map<K, �Collection<V>>,开发人员更多精力放在业务逻辑上,而不是数据结构上。
ListMultiMap 和 SetMultiMap 实现,get查询时候分别返回 List 和 Set。
invertFrom,将键值互换生成新的MultiMap。BiMap, key和value可以互换,value必须保证唯一。
BiMap.forceput 会覆盖原有的key和value,而put 如果存在重复元素,会抛异常。Table, 实现了类似Map<K1, Map<K2, V> 的结构。
可以根据row检索k1下标的Map,或者根据column检索k2下表的Map<k1, v>ClassToInstanceMap, key是Class, value是Class对应实例的Map。
RangeSet 和 RangeMap 的特点主要在于元素的类型Range
Range实现了开闭区间的数据结构
集合工具类
Iterables
concat 连接多个Iterables的view
frequency 统计某个对象在iterables的个数
partition 对Iterables集合分片
getFirst、getLast 返回第一个或最后一个成员
elementEqual 比较2个集合是否包含相同顺序的相同元素
limit 返回前n个元素
getOnlyElement 如果集合是单元素集合就返回里面的元素,不是就抛异常,适合那种只包含了一个元素集合的情况。Sets 包含了交集、并集、非交集
Maps
uniqueIndex(collections, Function<Element>) 通过Function对每个element生成key,形成键值对,返回Map
difference 对两个map做交集、非交集等
帮助类
Forwarding 使用装饰模式,代理一个集合,可以选择性地重写代理类里的方法,不用每个方法都自己写。
Iterators.peekingIterator 看看而已
缓存
- 回调方式get缓存,如果get不到执行定义的回调方法。
- CacheBuilder可以定义removeListener,监听key被remove事件。
- 基于size的被动移除,是在临近size的时候,就会开始被动移除不常用的kv
EventBus 事件监听、发布订阅
参考 http://www.cnblogs.com/peida/p/EventBus.html
并发
- ListenableFuture 对future结果注册监听,future有结果后调用callback,全程自动化。
字符串帮助类
- Joiner 合并集合成字符串,特点是可以跳过null值。
- Splitter 按指定分隔符拆分字符串,特点是可以忽略空值,支持正则表达式,支持定长分割。
- CharMatcher,提供现成的模式,对匹配该模式的字符做替换、删除、trime处理,例如数字、大小写字符、空格、字母区间等。
- Charsets,提供字符编码的常量。
- CaseFormat,提供名字转换,比如下划线、驼峰。
原声类型工具类
提供java原声类型类似的包装类方法。
io工具类
- ByteStreams 和 CharStreams 提供了Stream 和 byte[], Reader 和 String 的转换。
- Files 文件类操作,扩展名、路径等。