Guava

Precondition

关于这部分的检查抛出异常方法,也是平时写代码检查外部请求参数要有意识的几个点:

  1. checkArugment 和 checkState, 这2个都是判断参数是否为true,但是抛出的Exception不一样,一般是带有业务逻辑的检查。
  2. checkNotNull,这个就是null的检查了。
  3. checkElementIndex、checkPositionIndex,检查集合是否越界。
  • java的异常分为两大类:CheckedException 和 UncheckedException,前者是寄希望上游能作出相应的catch执行补救逻辑,相应地CheckedException要提供更多信息给上游方;后者的发生一般上游是无能为力的,只能打印异常信息定位具体原因。
  • 要对finally的使用有意识,finally代码块保证了即使程序发生异常也是必须执行的逻辑。

优化了Object的相关方法

  1. Objects.equals 能比较null对象了,另外jdk7也提供了该方法。
  2. MoreObjects.toStringHelper 键值对的方式打印toString。
  3. 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.builder().addAll(collection).add(element).build()

copyOf不仅能转换成immutable集合,还能转换集合的类型

新集合

  1. MultiSet 允许存在重复元素的Set,但不像List保证顺序,提供了一系列关于元素个数增删改查的Api。
    SortedMultiSet实现,提供了对元素排序,方便统计某个区间内元素的个数。

  2. MultiMap,允许一个key对应多个value。
    相比 Map>,开发人员更多精力放在业务逻辑上,而不是数据结构上。
    ListMultiMap 和 SetMultiMap 实现,get查询时候分别返回 List 和 Set。
    invertFrom,将键值互换生成新的MultiMap。

  3. BiMap, key和value可以互换,value必须保证唯一。
    BiMap.forceput 会覆盖原有的key和value,而put 如果存在重复元素,会抛异常。

  4. Table, 实现了类似Map 的结构。
    可以根据row检索k1下标的Map,或者根据column检索k2下表的Map

  5. ClassToInstanceMap, key是Class, value是Class对应实例的Map。

  6. RangeSet 和 RangeMap 的特点主要在于元素的类型Range
    Range实现了开闭区间的数据结构

集合工具类

  1. Iterables
    concat 连接多个Iterables的view
    frequency 统计某个对象在iterables的个数
    partition 对Iterables集合分片
    getFirst、getLast 返回第一个或最后一个成员
    elementEqual 比较2个集合是否包含相同顺序的相同元素
    limit 返回前n个元素
    getOnlyElement 如果集合是单元素集合就返回里面的元素,不是就抛异常,适合那种只包含了一个元素集合的情况。

  2. Sets 包含了交集、并集、非交集

  3. Maps
    uniqueIndex(collections, Function) 通过Function对每个element生成key,形成键值对,返回Map

difference 对两个map做交集、非交集等

帮助类

  1. Forwarding 使用装饰模式,代理一个集合,可以选择性地重写代理类里的方法,不用每个方法都自己写。

  2. Iterators.peekingIterator 看看而已

缓存

  1. 回调方式get缓存,如果get不到执行定义的回调方法。
  2. CacheBuilder可以定义removeListener,监听key被remove事件。
  3. 基于size的被动移除,是在临近size的时候,就会开始被动移除不常用的kv

EventBus 事件监听、发布订阅

参考 http://www.cnblogs.com/peida/p/EventBus.html

并发

  1. ListenableFuture 对future结果注册监听,future有结果后调用callback,全程自动化。

字符串帮助类

  1. Joiner 合并集合成字符串,特点是可以跳过null值。
  2. Splitter 按指定分隔符拆分字符串,特点是可以忽略空值,支持正则表达式,支持定长分割。
  3. CharMatcher,提供现成的模式,对匹配该模式的字符做替换、删除、trime处理,例如数字、大小写字符、空格、字母区间等。
  4. Charsets,提供字符编码的常量。
  5. CaseFormat,提供名字转换,比如下划线、驼峰。

原声类型工具类

提供java原声类型类似的包装类方法。

io工具类

  1. ByteStreams 和 CharStreams 提供了Stream 和 byte[], Reader 和 String 的转换。
  2. Files 文件类操作,扩展名、路径等。

Math

你可能感兴趣的:(Guava)