谷歌guava_Google Guava:您永远不会知道的5件事
谷歌guava
每個開發人員可以使用哪些鮮為人知的Google Guava功能?
它是那里最受歡迎的庫之一,它是開源的,您可能已經知道了,它來自人們玩Quidditch作為一項真正的運動的地方(至少在The Internship上 )。 它不是哈利·波特(Harry Potter)的霍格沃茨(Hogwarts)庫,但確實有很多不足之處:Google番石榴(Guava)包含一系列核心Java庫,這些庫在Google內部誕生,經過生產測試和公開發布。 并且它在Java 8上出現之前還具有Optional。
Guava的主要重點是使用實用程序來改善圍繞常見任務的工作流程,這些實用程序可以幫助編寫更好,更簡潔的代碼并提高工作效率。 它以其集合和緩存功能而聞名,它包含許多有用但鮮為人知的功能。 對于集合和緩存,它引入了對JDKs集合API的改進,并填補了去年終于發布的缺失( 期待已久 )的JCache的空白。 在本文中,我想與您分享一些我們希望在Takipi上使用的Google Guava功能,以及我們剛剛發現的一些更有趣的發現。
注意:Guava支持Java 6及更高版本。
新帖:Google Guava:您永遠不會知道的5件事http://t.co/03maIKnZdC pic.twitter.com/hQuAF6PZ6C
— Takipi(@takipid) 2015年3月25日
1.未簽名的基元:它們存在!
Java 8鮮為人知的功能之一是Integer類中針對Unsigned Primitives的新解決方法。 Guava的一個鮮為人知的功能是,所有這些功能在Java 8發行之前已經可用了,并且可以在Java 6及更高版本中使用。 讓我們看一下番石榴中的處理方式。 我們面前有2個選擇,并且要保持一致:
將原始類型直接作為int處理,并記住在我們的邏輯中它是Unsigned:
int notReallyInt = UnsignedInts.parseUnsignedInt(4294967295); // Max unsigned intString maxUnsigned = UnsignedInts.toString(notReallyInt); // We’re legit!UnsignedInts和UnsignedLongs還支持比較,除法,最小值,最大值和更多方法。
一個包裝程序,避免直接處理基元并導致錯誤:
UnsignedInteger newType = UnsignedInteger.valueOf(maxUnsigned);newType = newType.plus(UnsignedInteger.valueOf("1")); // IncrementUnsignedInteger和UnsignedLong還支持減號,時間,dividedBy和mod等方法。
- 在Guava Wiki上內容
2.哈希:贏取128bit MurmurHash
當查看標準Java庫提供的非加密哈希功能時,我們真正想念的一件事是MurmurHash 。 它簡單,快速,分布均勻,并在許多語言中具有強大的支持。 不替換Java的hashCode(),但是如果您需要生成很多哈希(當32位還不夠時)并且您需要超級快地完成它而又不損害性能的話,那就太好了。 這是番石榴的加工方法:
HashFunction hf = Hashing.murmur3_128(); // 32bit version available as well HashCode hc = hf.newHasher().putLong(id).putString(name, Charsets.UTF_8).putObject(person, personFunnel).hash();使用漏斗完成對象的分解,其中包括有關如何讀取對象的說明,因此,如果我們有一個具有ID,名稱和出生年份的人:
Funnel<Person> personFunnel = new Funnel<Person>() {@Overridepublic void funnel(Person person, PrimitiveSink into) {into.putInt(person.id).putString(person.firstName, Charsets.UTF_8).putString(person.lastName, Charsets.UTF_8).putInt(birthYear);} };- 在Guava Wiki上內容
3. InternetDomainName:將替換您的域名驗證器
Guava的另一個很酷的小實用工具是InternetDomainName,毫不奇怪,它可以幫助解析和操作域名。 如果您自己編寫過類似的實用程序,您將欣賞它如何幫助您快速而優雅地解決它。 并且根據更新的RFC規范有效,并使用Mozilla基金會發起的“ 公共后綴列表 ”中的域列表 。 總的來說,它還具有比apache-commons驗證程序等效的方法。 讓我們看一個簡單的例子:
InternetDomainName owner =InternetDomainName.from("blog.takipi.com").topPrivateDomain(); // returns takipi.comInternetDomainName.isValid(“takipi.monsters"); // returns false域名可能引起混淆的一些概念:
當您需要驗證域時,此實用程序會派上用場,例如最近在Takipi中添加的JIRA集成中,在將其連接到Takipi的生產錯誤分析工具之前,我們首先檢查了JIRA主機。
- 在Guava Wiki上內容
4. ClassPath反射:墻上的鏡子
在檢查Java的Reflection功能(即檢查我們自己的代碼的能力)時,您會發現沒有簡單的方法來獲取包或項目中所有類的列表。 這是我們真正喜歡的Guava功能之一,因為它有助于獲取有關您所運行的環境的更多信息。 它的工作原理很簡單:
ClassPath classpath = ClassPath.from(classloader); for (ClassPath.ClassInfo classInfo : classpath.getTopLevelClasses("com.mycomp.mypackage")) {System.out.println(classInfo.getName()); }該代碼段將循環遍歷并打印出我們指定的包中的所有類名。 這里值得一提的是,掃描僅包括我們提到的程序包中的物理類。 它不會包含從其他地方加載的類,因此請謹慎使用它,因為它有時會給您帶來不完整的印象。
- 在Guava Wiki上內容
5. CharMatcher:簡化的正則表達式?
讓我們以另一個問題結束此功能綜述,我相信您會認識到。 您有一個或多個字符串,需要以某種格式設置,刪除空格或其他字符,替換特定字符,指定數字或不輸入數字。 通常,抓住與某種模式匹配的字符并對其進行處理。 番石榴在這里提供了CharMatcher方法來優雅地處理此類問題。
 對于此任務,我們有一些預定義的模式,例如JAVA_UPPER_CASE(大寫字符),JAVA_DIGIT(數字),INVISIBLE(不可見的Unicode字符)等等。 除了預定義的模式,我們還可以自己嘗試一下并創建自己的模式。 讓我們看一下如何使用快速代碼示例: 
 字符串間隔= CharMatcher.WHITESPACE.trimAndCollapseFrom(string,''); 
這將從字符串末尾修剪所有空白,并將所有后續空白合并為一個。
String keepAlex = CharMatcher.anyOf(“alex”).retainFrom(someOtherString);該行將使用字符串,并刪除所有未出現在我名字中的字符。 如果我會成為說唱歌手,那就是我所有歌曲的開始方式
- 在Guava Wiki上內容
結論
我們已經看到了Google Guava的一些最有趣的功能,但不包括流行的集合和緩存庫。 其中一些在塔基皮(Takipi)中大量使用,而其他則是有用的東西,我們認為許多項目都可以從中受益。 Google Guava幫助開發人員提高了工作效率,而這正是Takipi旨在通過我們正在開發的工具實現的目標(雖然太酷了,但是,我可能有偏見: 您可以自己嘗試一下 )。
我們很想知道,大多數開發人員不使用您使用的其他Guava功能嗎? (收集和緩存不計算在內!)。 請在下面的評論部分分享您的想法。
翻譯自: https://www.javacodegeeks.com/2015/03/google-guava-5-things-you-never-knew-it-could-do.html
谷歌guava
總結
以上是生活随笔為你收集整理的谷歌guava_Google Guava:您永远不会知道的5件事的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 延时备案风险(延时备案)
- 下一篇: app操作快捷键(苹果手机app快捷键)
