使用番石榴的5个理由
Guava是一個開放源代碼庫,其中包含許多Java類,由Google編寫。 它是雜項(xiàng)實(shí)用程序函數(shù)和類的潛在有用來源,我敢肯定,許多開發(fā)人員以前已經(jīng)寫過自己,或者只是想要并且從來沒有時間編寫它們。 這是使用它的5個充分理由!
1.集合初始化器和實(shí)用程序
通用同構(gòu)集合是Java中的一個很棒的功能,但是有時它們的構(gòu)造有點(diǎn)太冗長,例如:
Java 7通過允許非正式地稱為Diamond運(yùn)算符的有限形式的類型推斷,以一種真正通用的方式解決了這個問題。 因此,我們可以將上面的示例重寫為:
final Map<String, Map<String, Integer>> lookup = new HashMap<>();在較早的Java發(fā)行版中,實(shí)際上已經(jīng)可以對非構(gòu)造函數(shù)方法進(jìn)行這種推斷,并且Guava為現(xiàn)有的Java集合提供了許多現(xiàn)成的構(gòu)造函數(shù)。 上面的例子可以寫成:
final Map<String, Map<String, Integer>> lookup = Maps.newHashMap();Guava還為Maps , Sets等人的收藏提供了許多有用的實(shí)用程序功能。 類。 我最喜歡的是Sets.union和Sets.intersection方法,這些方法返回集合上的視圖,而不是重新計(jì)算值。
2.有限的功能樣式編程
Guava提供了一些常用的方法來以功能樣式傳遞方法。 例如,許多功能性編程語言所具有的map函數(shù)以Collections2.transform方法的形式存在。 Collections2還具有過濾器方法,該方法允許您限制集合中的值。 例如,要從一個集合中刪除為空的元素,并將其存儲在另一個集合中,可以執(zhí)行以下操作:
Collection<?> noNullsCollection = filter(someCollection, notNull());重要的是要記住,在這兩種情況下,該函數(shù)都返回一個新集合,而不是修改現(xiàn)有集合,并且延遲地計(jì)算了所得集合。
3.多圖和雙圖
Map的真正常見用法是為單個鍵存儲多個值。 使用標(biāo)準(zhǔn)Java集合通常通過使用另一個集合作為值類型來完成。 不幸的是,這最終涉及許多儀式,就初始化收藏而言,這些儀式需要重復(fù)。 多圖可以將其清除很多,例如:
Multimap<String, Integer> scores = HashMultimap.create(); scores.put("Bob", 20); scores.put("Bob", 10); scores.put("Bob", 15); System.out.println(Collections.max(scores.get("Bob"))); // prints 20還有一個雙向的BiMap類-也就是說,它強(qiáng)制值和鍵具有唯一性。 由于值也是唯一的,因此可以反向使用BiMap。
4.簡單的哈希碼和比較器
想要從其字段的哈希碼為Java中的類生成哈希碼是很常見的。 Guava在Objects類中為此提供了一種實(shí)用程序方法,下面是一個示例:
int foo; String bar;@Override public int hashCode() {return Objects.hashCode(foo, bar); }如果要定義哈希碼方法,請不要忘記保持平等契約 。
比較器是另一個示例,其中經(jīng)常編寫比較器涉及將一系列操作鏈接在一起。 Guava提供了一個ComparisonChain類以簡化此過程。 這是一個帶有int和String類的示例:
int foo; String bar;@Override public int compareTo(final GuavaExample o) {return ComparisonChain.start().compare(foo, o.foo).compare(bar, o.bar).result(); }5.防御性編碼
您是否發(fā)現(xiàn)自己定期為方法編寫某些前提條件? 有時,這些內(nèi)容可能不必要地冗長,或者無法直接傳達(dá)意圖。 Guava為Preconditions類提供了一系列常見的前提條件。
例如,代替if語句和顯式異常throw…
if (count <= 0) {throw new IllegalArgumentException("must be positive: " + count); }…您可以使用一個明確的前提:
checkArgument(count > 0, "must be positive: %s", count);結(jié)論
能夠用guava中的類替換現(xiàn)有的庫類,可以幫助您減少需要維護(hù)的代碼量,并可能提高生產(chǎn)力。 還有其他選擇,例如Apache Commons項(xiàng)目。 可能是您已經(jīng)使用并了解了這些庫,或者比Guava方法更喜歡它們的方法和api。 Guava確實(shí)有一個Idea Graveyard –可讓您對Google工程師認(rèn)為是庫的限制或錯誤的設(shè)計(jì)決策有一些了解。 您可能不會單獨(dú)同意這些選擇,此時您將回到編寫自己的庫類。 總體而言,盡管Guava鼓勵簡潔而禮貌的風(fēng)格,但Guava的某些適當(dāng)應(yīng)用可以幫助許多Java項(xiàng)目。
原文: http : //insightfullogic.com/blog/2011/oct/21/5-reasons-use-guava/
翻譯自: https://www.javacodegeeks.com/2013/06/5-reasons-to-use-guava.html
總結(jié)
以上是生活随笔為你收集整理的使用番石榴的5个理由的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 龙珠z电脑游戏(龙珠z网游)
- 下一篇: 路由器与猫怎么连接如何连接猫到路由器