Guava學習

通過使用guava庫,讓代碼簡潔易擴展。


1、條件檢查

業(yè)務(wù)代碼書寫過程中,各種判空和參數(shù)檢查是不可避免的,重復(fù)繁瑣的代碼讓項目顯得臃腫丑陋。所以我們可以借用guava封裝前置條件檢查的函數(shù),下面介紹兩個最常用的方法。

checkArgument(boolean) 檢查boolean是否為true,用來檢查傳遞給方法的參數(shù)

checkNotNull(T) 檢查value是否為null,該方法返回value,可內(nèi)嵌使用。


2、排序器

Ordering是Guava最常用的Comparator類,比comparator更易擴展。

A Ordering的新建

Order<String> natural = Ordering.natural(); //使用自然順序, 例如:整數(shù)從小到大,字符串是按字典順序

Order<String> usingToString = Ordering.usingToString(); //使用toString()返回的字符串按字典順序進行排序

Ordering byLengthOrdering =new Ordering() {@Override public intcompare(@NullableString s,@NullableString t1) {returnInts.compare(s.length(),t1.length());}}; //自定義排序規(guī)則

B Ordering的使用

reverse() //相反的排序

isOrdered(Collection<T> c) //是否是有序的

sortedCopy(Collection<T> c) //返回排序好的隊列


3、集合

集合類的封裝,不再需要繁瑣的編碼方式。

A 不可變集合

ImmutableSet/ImmutableList/ImmutableMap //不可變

ImmutableSortedSet //自動排序

ImmutableMultiset //可以重復(fù),可以統(tǒng)計某個值在 set集合中有多少個

B 特殊集合

BiMap //雙向Map,可以通過reverse()反轉(zhuǎn)key-value

MultiMap //value可為一個list

RangeMap //描述了”不相交的、非空的區(qū)間”到特定值的映射,不合并相鄰的區(qū)間

Forwarding //裝飾器,類繼承ForwardingXXX,可以重新方法add/delegate等方法


4、緩存 Guava Cache

cache是線程安全的,類似于concurrentMap,但是內(nèi)部封裝更多的方法

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


5、函數(shù)式編程

重點學習的部分,將繁瑣的代碼簡化。函數(shù)式編程最常見的就是用于集合的轉(zhuǎn)換和過濾。

A list值轉(zhuǎn)換

B list轉(zhuǎn)換為map

C 過濾 predicate

6、guava的并發(fā)編程

重點是ListenableFuture,ListenableFuture可以監(jiān)控Future是否執(zhí)行完成。Future的計算是異步的,但是獲取結(jié)果在主線程中,是會阻塞主線程的。但是如果通過ListenableFuture,那么獲取結(jié)果也是新開線程,并不阻塞主線程。適用的場景是多個任務(wù)并發(fā)計算,某個任務(wù)的計算時間特別長。舉例如下

A 直接在主線程獲取結(jié)果并處理,耗時512ms

B 使用ListenableFuture,耗時14ms

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容