日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用番石榴的5个理由

發布時間:2023/12/3 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用番石榴的5个理由 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Guava是一個開放源代碼庫,其中包含許多Java類,由Google編寫。 它是雜項實用程序函數和類的潛在有用來源,我敢肯定,許多開發人員以前已經寫過自己,或者只是想要并且從來沒有時間編寫它們。 這是使用它的5個充分理由!

1.集合初始化器和實用程序

通用同構集合是Java中的一個很棒的功能,但是有時它們的構造有點太冗長,例如:

final Map<String, Map<String, Integer>> lookup = new HashMap<String, Map<String, Integer>>();

Java 7通過允許非正式地稱為Diamond運算符的有限形式的類型推斷,以一種真正通用的方式解決了這個問題。 因此,我們可以將上面的示例重寫為:

final Map<String, Map<String, Integer>> lookup = new HashMap<>();

在較早的Java發行版中,實際上已經可以對非構造函數方法進行這種推斷,并且Guava為現有的Java集合提供了許多現成的構造函數。 上面的例子可以寫成:

final Map<String, Map<String, Integer>> lookup = Maps.newHashMap();

Guava還為Maps , Sets等人的收藏提供了許多有用的實用程序功能。 類。 我最喜歡的是Sets.union和Sets.intersection方法,這些方法返回集合上的視圖,而不是重新計算值。

2.有限的功能樣式編程

Guava提供了一些常用的方法來以功能樣式傳遞方法。 例如,許多功能性編程語言所具有的map函數以Collections2.transform方法的形式存在。 Collections2還具有過濾器方法,該方法允許您限制集合中的值。 例如,要從一個集合中刪除為空的元素,并將其存儲在另一個集合中,可以執行以下操作:

Collection<?> noNullsCollection = filter(someCollection, notNull());

重要的是要記住,在這兩種情況下,該函數都返回一個新集合,而不是修改現有集合,并且延遲地計算了所得集合。

3.多圖和雙圖

Map的真正常見用法是為單個鍵存儲多個值。 使用標準Java集合通常通過使用另一個集合作為值類型來完成。 不幸的是,這最終涉及許多儀式,就初始化收藏而言,這些儀式需要重復。 多圖可以將其清除很多,例如:

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類-也就是說,它強制值和鍵具有唯一性。 由于值也是唯一的,因此可以反向使用BiMap。

4.簡單的哈希碼和比較器

想要從其字段的哈希碼為Java中的類生成哈希碼是很常見的。 Guava在Objects類中為此提供了一種實用程序方法,下面是一個示例:

int foo; String bar;@Override public int hashCode() {return Objects.hashCode(foo, bar); }

如果要定義哈希碼方法,請不要忘記保持平等契約 。

比較器是另一個示例,其中經常編寫比較器涉及將一系列操作鏈接在一起。 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.防御性編碼

您是否發現自己定期為方法編寫某些前提條件? 有時,這些內容可能不必要地冗長,或者無法直接傳達意圖。 Guava為Preconditions類提供了一系列常見的前提條件。

例如,代替if語句和顯式異常throw…

if (count <= 0) {throw new IllegalArgumentException("must be positive: " + count); }

…您可以使用一個明確的前提:

checkArgument(count > 0, "must be positive: %s", count);

結論

能夠用guava中的類替換現有的庫類,可以幫助您減少需要維護的代碼量,并可能提高生產力。 還有其他選擇,例如Apache Commons項目。 可能是您已經使用并了解了這些庫,或者比Guava方法更喜歡它們的方法和api。 Guava確實有一個Idea Graveyard –可讓您對Google工程師認為是庫的限制或錯誤的設計決策有一些了解。 您可能不會單獨同意這些選擇,此時您將回到編寫自己的庫類。 總體而言,盡管Guava鼓勵簡潔而禮貌的風格,但Guava的某些適當應用可以幫助許多Java項目。

原文: http : //insightfullogic.com/blog/2011/oct/21/5-reasons-use-guava/

參考:來自Lviv博客Java用戶組的 JCG合作伙伴 Andriy Andrunevchyn 使用Guava的5個理由 。

翻譯自: https://www.javacodegeeks.com/2013/06/5-reasons-to-use-guava.html

總結

以上是生活随笔為你收集整理的使用番石榴的5个理由的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。