阿里巴巴|为什么不建议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等等 , 好了 , 希望这篇文章让你快速进阶 , 快乐编程!
你现在还想用阿里巴巴的编码规范吗?
推荐阅读
- 为什么有"iphone是穷人手机"的言论?用万元机的人真穷吗
- 比起007,996真的是福报!互联网大厂为什么加班都这么狠?
- 都是为自己手机代言,为什么董明珠不行,雷军太行了?
- realme国潮锦鲤手机为什么叫V15?徐起解释命名规则
- 手机网络突然变成2G,建议马上关掉手机,小心你的钱被对方转走
- 为什么苹果用户哪怕买二手机,都不用安卓?三点原因太真实
- 卡内基梅隆大学提出了更好的强密码设置建议
- 比原子弹还稀有,全球就两国掌握,光刻机为什么如此难造?
- 苹果一意孤行,无视高通建议,iPhone12“遮羞布”被扯下
- 网友挑事:给库克建议小米11环保方式 呼吁苹果借鉴