首页 今日头条正文

12333社保查询网,为什么强烈推荐Java程序员运用Google Guava编程,坐井观天

现在Google Guava在实践运用中十分广泛,本篇博客将以博主对Guava运用的知道以及在项目中的经历来给咱们共享!学习运用Google Gua人C交va能够让你高兴编程,写出高雅的JAVA代码!


以面向目标思维处理字符串:Joiner/Splitter/CharMatcher

JDK供给的String还不可好么?


或许还不可友爱,至少让咱们用起来还不可爽,还得操心!举个栗子,比方St永久地址ring供给的split办法,咱们得关怀空字符串吧,还得考虑回来的成果中存在null元素吧,只供给了前后trim的办法(假如我想对中心元素进行trim呢)。

那么,看下面的代码示例,guava让你不用在操心这些:


Joiner/Splitter

Joiner是连接器,Splitter是切割器,一般咱们会把它们界说为static final,运用on生成对12333社保查询网,为什么强烈推荐Java程序员运用Google Guava编程,管中窥豹象后在运用到String进行处理,这是能够复用的。要知道apache commons StringUtils供给的都是static method。愈加重要的是,guava供给的Join12333社保查询网,为什么强烈推荐Java程序员运用Google Guava编程,管中窥豹er/Splitter是经过充沛测验,它的稳定性和功率要插一下比apache高出不少,这个你能够自行测验下~发现没有咱们想对String做什么操作,便是生成自己定制化的Joiner/Splitter,多么直白,简略,流通的API!关于Joiner,常用的办法是 越过NULL元素:skipNulls() / 关于NULL元素运用其他代替:useForNull(String)关于Splitter,常用的办法是:trimResults()/omitEmptyStrings()。留意拆分的办法,有字符串,宋依临还有正则,还有固12333社保查询网,为什么强烈推荐Java程序员运用Google Guava编程,管中窥豹定长度切割(太交心了!)

其实除了Joiner/Splitter外,guava还供给了字符串匹配器:CharM水卜atcher


CharMatcher

CharMa骸骨之爪tcher,将字符的匹配和处了解耦,并供给丰厚的办法供你运用!

对根本类型进行支撑

guava对JDK供给的原生类型操作进行了扩展,使得功用愈加强壮!


Ints

guava供给了Bytes/Shorts/Ints/Iongs/Floats/Doubles/Chars/Booleans这些根本数据类型的扩展支撑,只要你想不到的,没有它没有的!

对JDK调集的有用弥补

灰色地带:Mu12333社保查询网,为什么强烈推荐Java程序员运用Google Guava编程,管中窥豹ltiset

JDK的调集,供给了有序且能够重复的List,无序且不能够重复的Set。那这儿其实关于调集触及到了2个概念,一个order,一个dups。那么List vs Set,and then some ?


Multiset

Multiset是什么,我想上面的图,你应该了解它的概念了。Multiset便是无序的,可是能够重复的调集,它便是游离在List/Set之间的“灰色地带”!(至于有序的,不允许重复的调集嘛,guava还没有供给,当然在未来应该会供给UniqueList,我猜的,哈哈)

来看一个Multiset的示例:


Multiset Code

Multiset自带一个有用的功用,便是能够盯梢每个目标的数量。

Immutable vs unmodifiable

来咱们先看一个unmodifiable的比方:


unmodifiable

你看到JDK供给的unmodifiable的缺点了吗?实践上,Collections.unmodifiableXxx所回来的调集和源调集是同一个目标,只不过能够对调集做出改动的API都被override,会抛出UnsupportedOperationException。也便是说咱们改动源调集,导致不可变视图(unmodifiable Vie团长遗弃史w)也会发生变化,oh my god!

当然,在不运用guava的状况下,咱们是怎样防止上面的问题的呢?


defensive copies

上面提醒了一个概念:Defensive Copies,保护性复制。

OK,unmodifiable看上去没有吕文鑫问题呢,可是guava仍然觉得能够改善,所以提出了Immutable的概念,来看:


Immutable

就一个copyOf,你不会忘掉,如此cheap~用G残暴腿甲oogle官方的说法是:we're12333社保查询网,为什么强烈推荐Java程序员运用Google Guava编程,管中窥豹 using just one class,just say ex柳荣夏actly what we mean,很了不得吗(不只是是个概念,Immutable在COPY阶段还考虑了线程的并发性等,很智能的!),O(∩_∩)O哈哈~guava供给了许多Immutable调集,比方ImmutableList/内裤相片ImmutableSet/ImmutableSortedSet/ImmutableMap/......

看一个ImmutableMap的比方:


ImmutableMap

可不能够一对多登乘绳梯:Multimap

JDK供给给咱们的Map是一个键,一个值,一对一的,那么在实践开发中,明显存在一个KEY多个VALUE的状况(比方一个分类下的书本),咱们往往这样表达:Map>,如同有点臃肿!臃肿也就算了,愈加不爽的事,咱们还得判别KEY是否存在来决议是否new 一个LIST出来,有点费事!愈加费事的工作还在后头,比方遍历,比方删去,so hard......

来看guava怎么替你处理这个大费事的:


Multimap

友谊提示下,guava一切的调集都有create办法,这样的优点鹅夷草在于简略,并且咱们不用在重复泛型信息了。get()/keys()/keySet()/values()/entries()/asMap()都是十分有用的回来view collection的办法。Multimap的完结类有:ArrayListMultimap/HashMultimap/LinkedHashMultimap/TreeMultimap/ImmutableMultimap/......

可不能够双向:BiMap

JDK供给的MAP让咱们能够find value by key,那么能不能经过find key by value呢,能不能KEY和VALUE都是仅有的呢。这是一个双向的概念,即forward+backward。在实践场景中有这样的需求吗?比方经过用户ID找到mail,也需求经过mail找回用户名。没有guava的时分,咱们需求create forward map AND create backward map,and now just let guava do that for you.


B莲蕊iMap

biMap / biMap.inverse() / biMap.inverse().inverse恋女童() 它们是什么联系呢?你能够略微看一下BiMap的源码12333社保查询网,为什么强烈推荐Java程序员运用Google Guava编程,管中窥豹完结,实践上,当你创立BiMap的时分,在内部保护了2个map,一个forward map,一个backward map,并且设置了它们之间的联系。因而,biMap.inverse() != biMap ;biMap.inverse().inverse() == biMap

可不能够多个KEY:Table

咱们知道数据库除了主键外,还供给了复合索引,并且实践中这样的多级联系查找也是比较多的,当然咱们能够运用嵌套的Map来完结:Map>。为了让咱们的代码看起来不那么丑恶,guava为咱们供给了Table。


Table

Table触及到3个概念:rowKey,columnKey,value,并供给了多种视图以及操作办法让你愈加轻松的处理多个KEY的场景。

函数式编程:Functions


Functions

上面的代码是为了完结将List调集中的元素,先截取5个长度,然后转成大写。函数式编程的优点在于在调集眉山市天气预报遍历操作中供给自界说Function的操作,比方transform转化。咱们再也不需求一遍遍的遍历调集,明显的简化了代码!

对调集的transform操作能够经过Function完结

断语:Predicate

Predicate最常用的功用便是运用在调集的过滤傍边!

filter

需求留意的是Lists并没有供给filter办法,不过你能够运用Collections2.filter完结!

check n12333社保查询网,为什么强烈推荐Java程序员运用Google Guava编程,管中窥豹ull and other:Optional、Preconditions

在guava中,关于null的处理手法是快速失利,你能够看看guava的源码,许多办法的榜首行便是:Preconditions.checkNotNull(elements);

要知道null是含糊的概念,是成功呢,仍是失利呢,仍是其他什么意义呢?

Preconditions/Optional

Cache is king

关于大多数互联网项目而言,缓存的重要性,显而易见!假如咱们的运用体系,并不想运用一些第三方缓存组件(如redis),咱们只是想在本地有一个功用满足强壮的缓存,很可惜JDK供给的那些SET/MAP还不可!


CacheLoader

首要,这是一个本地缓存,guava供给的cache是一个简练、高效,易于保护的。为什么这么说呢?由于并没有一个独自的线程用于改写 OR 整理cache,关于cache的操作,都是经过拜访/读写带来的,也便是说在读写中完结缓存的改写操作!其次,咱们看到了,咱们十分浅显的告知cache,咱们的缓存战略是什么,SO EASY!在如此简略的背面,是guava协助咱们做了许多工作,比方线程安全。

让异步回调愈加简略

JDK中套流氓供给了Future/FutureTask/Callable来对异步回调进行支撑,可是仍是看上去挺杂乱的,能不能愈加简略呢?比方注册一个监听回调。

异步回调

咱们能够经过guava对JDK供给的线程池进行装修姐妹爱,让其具有异步回调监听功用,然后在设置监听器即可!

Summary

到这儿,这篇文章也只介绍关照妇了guava的冰山一角,其实还有许多内容:

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。