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.<XXX>builder().addAll(collection).add(element).build()

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

新集合

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

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

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

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

  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<Element>) 通过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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容