阿里巴巴|为什么不建议Java程序员用阿里巴巴规范,而使用GoogleGuava编程( 三 )




biMap / biMap.inverse() / biMap.inverse().inverse() 它们是什么关系呢?
你可以稍微看一下BiMap的源码实现 , 实际上 , 当你创建BiMap的时候 , 在内部维护了2个map , 一个forward map , 一个backward map , 并且设置了它们之间的关系 。
因此 , biMap.inverse() != biMap ;biMap.inverse().inverse() == biMap
可不可以多个KEY:Table我们知道数据库除了主键外 , 还提供了复合索引 , 而且实际中这样的多级关系查找也是比较多的 , 当然我们可以利用嵌套的Map来实现:Map<k1Map<k2v2>> 。 为了让我们的代码看起来不那么丑陋 , guava为我们提供了Table 。


Table涉及到3个概念:rowKeycolumnKeyvalue , 并提供了多种视图以及操作方法让你更加轻松的处理多个KEY的场景 。
函数式编程:Funcitons


上面的代码是为了完成将List集合中的元素 , 先截取5个长度 , 然后转成大写 。
函数式编程的好处在于在集合遍历操作中提供自定义Function的操作 , 比如transform转换 。 我们再也不需要一遍遍的遍历集合 , 显著的简化了代码!


对集合的transform操作可以通过Function完成
断言:Predicate
Predicate最常用的功能就是运用在集合的过滤当中!


需要注意的是Lists并没有提供filter方法 , 不过你可以使用Collections2.filter完成!
check null and other:Optional、Preconditions在guava中 , 对于null的处理手段是快速失败 , 你可以看看guava的源码 , 很多方法的第一行就是:Preconditions.checkNotNull(elements);要知道null是模糊的概念 , 是成功呢 , 还是失败呢 , 还是别的什么含义呢?


Cache
对于大多数互联网项目而言 , 缓存的重要性 , 不言而喻!
如果我们的应用系统 , 并不想使用一些第三方缓存组件(如redis) , 我们仅仅想在本地有一个功能足够强大的缓存 , 很可惜JDK提供的那些SET/MAP还不行!


首先 , 这是一个本地缓存 , guava提供的cache是一个简洁、高效 , 易于维护的 。 为什么这么说呢?因为并没有一个单独的线程用于刷新 OR 清理cache , 对于cache的操作 , 都是通过访问/读写带来的 , 也就是说在读写中完成缓存的刷新操作!
其次 , 我们看到了 , 我们非常通俗的告诉cache , 我们的缓存策略是什么 , SO EASY!在如此简单的背后 , 是guava帮助我们做了很多事情 , 比如线程安全 。
让异步回调更加简单
JDK中提供了Future/FutureTask/Callable来对异步回调进行支持 , 但是还是看上去挺复杂的 , 能不能更加简单呢?比如注册一个监听回调 。


我们可以通过guava对JDK提供的线程池进行装饰 , 让其具有异步回调监听功能 , 然后在设置监听器即可!
到这里 , 这篇文章也只介绍了guava的冰山一角 , 其实还有很多内容:比如反射、注解、网络、并发、IO等等 , 好了 , 希望这篇文章让你快速进阶 , 快乐编程!
你现在还想用阿里巴巴的编码规范吗?


推荐阅读