谷歌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")); // Increment

UnsignedInteger和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

域名可能引起混淆的一些概念:

  1. publicSuffix()–根据“公共后缀列表”为单独实体的顶级域名。 因此,我们将得到co.uk,.com,.cool之类的结果(是的,这是一个真实的后缀,并且是javais.cool , scalais.cool和cppis.cool )。
  2. topPrivateDomain()–根据公共后缀列表(PSL)是作为单独实体的顶级域。 在blog.takipi.com上应用它会返回takipi.com,但是,如果您在Github页面站点上尝试使用它,由于它是出现在PSL上的单独实体,所以username.github.io将拒绝username.github.io。

当您需要验证域时,此实用程序会派上用场,例如最近在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件事相关推荐

  1. Google Guava:您永远不会知道的5件事

    每个开发人员都可以使用哪些鲜为人知的Google Guava功能? 它是那里最受欢迎的库之一,它是开源的,您可能已经知道了,它来自人们玩Quidditch作为一项真正的运动的地方(至少在The Int ...

  2. [密码学基础][每个信息安全博士生应该知道的52件事]52.先进的应用概念 系统的大致安全需求

    这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么.我们希望学生知道从理论到实践的各 ...

  3. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]48.TPM的目的和使用方法

    这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么. TPM(Trusted Pla ...

  4. 软件架构师应该知道的 97 件事

    软件架构师应该知道的 97 件事  1.客户需求重于个人简历(Nitin Borwankar)          客户需求至上.为了自己的简历更炫而采用新技术是沽名钓誉,往往事与愿违.         ...

  5. 女孩做妻子前应知道的10件事

    女孩做妻子前应知道的10件事 一段时间的甜蜜恋爱期过后,你和心爱的他终于要踏上期盼已久的红地毯.你发誓一定要做个最幸福的小女人,要成一个永远让丈夫着迷的好妻子.从一个女孩的身份转变为一个妻子的身份前, ...

  6. 关于食品安全,你应该知道的60件事

    关于食品安全,你应该知道的60件事 2016-05-20 634人浏览 我迷潘玮柏 关于食品安全,你应该知道的60件事 4月7日,世界卫生日,今年主题是"食品安全".每年全球约20 ...

  7. 软件架构师应该知道的97件事

    原文出处:http://blog.csdn.net/seanbv/article/details/5451705 软件架构师是个让人羡慕的职业,在市场经济成熟的国家,其薪酬已经达到医生.律师.注册会计 ...

  8. [转]读《程序员应该知道的97件事》

    正文之前 熟知软件开发的人都知道这个行业里充满了一次次悲壮的失败,每一座成功项目的丰碑下都埋葬着无数同类型的失败项目.大多数软件项目都像是一次典型的死亡行军 加班是一种习惯,并会逐渐产生依赖 编程远远 ...

  9. 程序员应该知道的97件事

     转自:http://dearymz.blog.163.com/blog/static/205657420139243750104/ 正文之前 熟知软件开发的人都知道这个行业里充满了一次次悲壮的失 ...

最新文章

  1. 深度学习100问:什么是深监督(Deep Supervision)?
  2. FTP服务器之vsftp
  3. 【Android 界面效果9】9patch图片
  4. Caffe和MATLAB
  5. win8, VS2013 .NET 4.5在哪找svcutil.exe?
  6. 安徽关节式焊接机器人_机器人自动焊接技术的优势及应用介绍
  7. 出现这些迹象,说明你面试可能没戏了
  8. Linux awk命令使用方法
  9. python数据库连接代码_python 连接各类主流数据库的实例代码
  10. Codeforces 923 B. Producing Snow
  11. 【TensorFlow-windows】(七) CNN之VGG-net的测试
  12. 动态时间规整算法(DTW)通俗易懂
  13. serv-u设置被动模式注意的问题
  14. 剑指Offer:面试题31——连续子数组的最大和(java实现)
  15. Python中IO编程-StringIO和BytesIO
  16. MATLAB ttest和ttest2的区别
  17. 自适应函数符和函数适配器(Adaptable Functors and Function Adapters)
  18. Redis Operator学习笔记
  19. 精密划片机维护及保养
  20. Android Sensor 传感器总结

热门文章

  1. [2020.11.27NOIP模拟赛]中位数之中位数【二分,树状数组】
  2. P2831-愤怒的小鸟【状压dp】
  3. 亿些模板【数据结构】
  4. 学习手记(2018.9.15~2018.11.10)——备战NOIP2018
  5. 【2018.4.7】模拟赛之四-ssl2385 猜数【水题】
  6. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) AC(带悔贪心)
  7. 汇编语言(二十九)之数值的二进制和十进制
  8. 一文带你了解Java Agent
  9. Java Map集合面试题汇总
  10. 数据结构(四)之单链表查找中间结点