google guava

Java编程的助手 - guava

Posted by shihunyewu on May 15, 2019

使用像 Guava 这样的库远远好于自己写

Guava 是 google 开发的一个 java 集合库,这些类库包含字符串、集合、并发、I/O 和 反射工具。Guava 封装了很多样板代码,让开发者的开发更便捷也更不容易在某些细节上出错。 由于 Guava 是第三方库,因此使用之前需要下载。

第 2 章,基础的 Guava

Joiner 类

Joiner 主要用来将列表中的字符串按照分割符连接在一起。

List<String> stringList = new ArrayList<String>();
stringList.add("aa");
stringList.add("bb");
stringList.add("cc");
System.out.println(Joiner.on(",").skipNulls().join(stringList));

输出结果

aa,bb,cc

除了最基本的连接,当元素为 null 时可以设置忽略或者是用另外的字符串替代。还可以将 map 中的键和值添加分隔符加入到字符串中。

Splitter 类

相当于 Joiner 的逆运算。可以在分割时去除空格,可以在分割字符串时指定键和值。

Charsets 类

里面封装了基本的字符集名,开发者不必再为记不清字符集名发愁了。

Strings 类

  • Strings.padEnd(String origin, int n, char c),向 origin 后面添加 n 个字符 c
  • Strings.padStart(String origin, int n, char c),向 origin 前面添加 n 个字符 c
  • Strings.nullToEmpty(String object),将 null 转换成 “”
  • Strings.emptyToNull(String object),将 “” 转换成 null
  • Strings.isNullOrEmpty(String object),判断 object 是否是 null 或者是 “”

第 4 章,集合类

Lists

  • Lists.newArrayList(object1, object2, object3,…); 将元素添加到新列表,返回列表
  • List<List<T>> Lists.partition(list, k),将 list 等分成 k 份

Sets

java 原生 Set 不支持例如求并集、交集这样的集合操作,Sets 提供了相关的 api

  • Sets.difference(set1, set2),求 set1 相对于 set2 的差集
  • Sets.symmetricDifference(set1, set2),求两个集合相互差集的并集
  • Sets.intersection(set1, set2),求两个集合的交集
  • Sets.union(s1, s2),求两个集合的并集

Multimaps

允许相同键值存在多个 val

ArrayListMultimap
  • 用 ArrayList 来保存 val 的 map
  • ArrayList 不强制要求 val 都是唯一的,可以重复
  • ArrayListMultimap 没有实现 Map 接口,如果想要将其变成 Map 类型,需要调用其 asMap() 方法
HashMultimap
  • HashMultimap 基于哈希表,不支持相同的 (key,val)

BiMap

  • 保持 val 是唯一的,使用 put 方法如果插入了相同的 val 时,会抛出异常
    • 如果一定要插入的话,需要使用 forcePut 方法,将会删除原来的 key,替换成新的 key
  • biMap.inverse(),会将 biMap 中的 key 和 val 反转,key 变成 val,val 变成 key

Table

保存了 map 的 map,底层数据结构是 Map<R, Map<K, V>>

  • HashBasedTable<Integer,Integer,String> table = HashBasedTable.create(5,5);

Range

用来比较是否在某一区间,可以选择区间两端的开闭

  • open,全开区间
  • close,全闭区间
  • openClosed,半开半闭
  • closeOpen,半闭半开
  • … 对任意类型都可以使用区间,只要该类实现了 Comparable 接口。实际上现在 java8 的流式编程已经能够很好地处理这种情况了。

参考书籍

<<Getting Started with Google Guava>>