Guava学习

通过使用guava库,让代码简洁易扩展。


1、条件检查

业务代码书写过程中,各种判空和参数检查是不可避免的,重复繁琐的代码让项目显得臃肿丑陋。所以我们可以借用guava封装前置条件检查的函数,下面介绍两个最常用的方法。

checkArgument(boolean) 检查boolean是否为true,用来检查传递给方法的参数

checkNotNull(T) 检查value是否为null,该方法返回value,可内嵌使用。


2、排序器

Ordering是Guava最常用的Comparator类,比comparator更易扩展。

A Ordering的新建

Order natural = Ordering.natural(); //使用自然顺序, 例如:整数从小到大,字符串是按字典顺序

Order usingToString = Ordering.usingToString(); //使用toString()返回的字符串按字典顺序进行排序

Ordering byLengthOrdering =new Ordering() {@Override public intcompare(@NullableString s,@NullableString t1) {returnInts.compare(s.length(),t1.length());}}; //自定义排序规则

B Ordering的使用

reverse() //相反的排序

isOrdered(Collection c) //是否是有序的

sortedCopy(Collection c) //返回排序好的队列


3、集合

集合类的封装,不再需要繁琐的编码方式。

A 不可变集合

ImmutableSet/ImmutableList/ImmutableMap //不可变

ImmutableSortedSet //自动排序

ImmutableMultiset //可以重复,可以统计某个值在 set集合中有多少个

B 特殊集合

BiMap //双向Map,可以通过reverse()反转key-value

MultiMap //value可为一个list

RangeMap //描述了”不相交的、非空的区间”到特定值的映射,不合并相邻的区间

Forwarding //装饰器,类继承ForwardingXXX,可以重新方法add/delegate等方法


4、缓存 Guava Cache

cache是线程安全的,类似于concurrentMap,但是内部封装更多的方法

http://ifeve.com/google-guava-cachesexplained/


5、函数式编程

重点学习的部分,将繁琐的代码简化。函数式编程最常见的就是用于集合的转换和过滤。

A list值转换

B list转换为map

C 过滤 predicate

6、guava的并发编程

重点是ListenableFuture,ListenableFuture可以监控Future是否执行完成。Future的计算是异步的,但是获取结果在主线程中,是会阻塞主线程的。但是如果通过ListenableFuture,那么获取结果也是新开线程,并不阻塞主线程。适用的场景是多个任务并发计算,某个任务的计算时间特别长。举例如下

A 直接在主线程获取结果并处理,耗时512ms

B 使用ListenableFuture,耗时14ms

你可能感兴趣的:(Guava学习)