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

每个开发人员都可以使用哪些鲜为人知的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及更高版本。

1.未签名的原语:它们存在!

Java 8鲜为人知的功能之一是Integer类中针对Unsigned Primitives的新解决方法。 Guava的一个鲜为人知的功能是,所有这些功能在Java 8发行之前就已经可用,并且可以在Java 6及更高版本中使用。 让我们来看看番石榴中的处理方式。 我们面前有两个选择,并且要保持一致:

将原始类型直接作为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页面站点上尝试它,则username.github.io将拒绝username.github.io,因为它是一个单独的实体,出现在PSL上。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hql中获取前一天的数据_PostgreSql 怎么获取数据库中关键系统信息(一)

如何通过SQL 的方式获得数据库中的一些关键信息&#xff0c;是一个DB最正常的工作&#xff0c;如何通过一些SQL来获得PG的一些关键的参数和信息或者是数据库中的一些信息是需要知道的一件事情。以下是部分 1一般来说每种数据库中都有一个或几个系统的数据库&#xff0c;在PG中s…

计算机信息技术为教育带来的变化,信息技术对课堂教学带来的变化

信息技术对课堂教学带来的变化谈一谈信息技术对教育教学的影响以及给课堂教学带来的变化龙川县培英学校 骆俊武在信息技术迅速发展的今天&#xff0c;计算机的应用、网络技术应用&#xff0c;直接影响着学校的的教育教学系统、学校的教育模式、教第一文库网师的教学方法。与传统…

abd shell关闭所有程序_一个 Shell 脚本逆袭的规范,拿走不谢

指定一个默认脚本解释器“#!” 是一个约定的标记&#xff0c;它告诉系统这个脚本需要什么解释器来执行&#xff0c;即使用哪一种Shell。他指明了当我们没有指定解释器的时候默认的解释器。为什么建议要在首行加上脚本默认解释器&#xff0c;因为有的操作系统的默认解释器不是sh…

unity 是厘米还是米_1种“竹节参”,植株有40厘米高,能挂果,果子成熟后变红,珍贵...

很多顽强的野生植物会在竹林里生长&#xff0c;我们都知道价值比较高的七叶一枝花、金线莲等植物&#xff0c;就会生长在湿润的竹林里&#xff0c;它们喜欢湿度比较高的环境&#xff0c;所以在其它比较潮湿的地方也有。不过还有1种“竹节参”&#xff0c;它在竹林里也是常见的&…

JS中的三种弹框

1.alert();"弹框提示" 2.confirm();“确认信息”3.prompt();"输入信息"转载于:https://www.cnblogs.com/hr2014/p/3637692.html

python 窗口 网页 访问_同事用Python操控浏览器运行,引的妹子围观不止!

Python可以做的事情很多&#xff0c;小编也正在奋力挖掘中&#xff0c;今天给大家分享一下&#xff0c;如何用Python来控制浏览器的运行及操作&#xff01;嗯 关于这个&#xff0c;大体有两种方式&#xff0c;且听小编一一列举&#xff1a;一、使用系统自带库 os这个方法的话任…

8g可用 安装内存16g_同样是16g内存,为啥都选两条8G,不选16G单条,这难道有啥讲究?...

相信大家在看一些大神的配置&#xff0c;或者蜗牛这种装机小编的配置的时候&#xff0c;发现内存经常是两条8G&#xff0c;而不是一条16G,很多小伙伴也发出了疑问&#xff0c;难道这里面有什么讲究&#xff1f;这就要扯到双通道&#xff0c;一般来说CPU或者主板的内存控制器有两…

Generate GUID using vbscript

在 .msi 中 的 Component table&#xff0c;查看 ComponentId 列&#xff0c;是一个16进制数的字符串&#xff0c; 用 InstallShield IDE 添加一个 component &#xff0c;ComponentId 会自动生成&#xff0c;点击“Generate GUID” 会重新生成一个新的 ComponentId&#xff0c…

ps怎么对比原图快捷键_PS教程:P图前后,你还能认出这是同一个人吗?

编按&#xff1a;PS一直被誉为亚洲四大邪术之一&#xff0c;比如下图你敢相信这是同一个人吗&#xff1f;是不是隐隐约约回忆起了乔碧萝殿下的辉煌&#xff1f;但话说回来&#xff0c;谁不想看到最好的自己呢&#xff1f;今天我们就看看PS如何将人脱胎换骨&#xff0c;学会这招…

第一个被赋予公明身份的机器人_一文读懂机器人的“眼睛”

看过漫威电影的同学都知道&#xff0c;钢铁侠在装甲里一眨眼&#xff0c;就通过眼球追踪操控人机互动&#xff0c;集黑科技于一身的装备简直不要太炫酷。如今&#xff0c;我们再回头看钢铁侠的AI识别系统&#xff0c;不禁思考这背后的视觉技术。如何让机器人像人类一样获取视觉…

太和二中计算机考试,安徽省太和二中高二数学下册期末考试试题精选

安徽省太和二中高二数学下册期末考试试题精选一.选择题(50分)1.设 是两条不同的直线, 是两个不同的平面,下列命题中正确的是( D )A . 若 , , ,则 B.若 , , ,则C.若 , , ,则 D.若 , , ,则2. 若 &#xff0c;则函数 的两个零点分别位于区间( A )A. 和 内 B. 和 内 C. 和 内 D. 和…

git获取本地版本号_Git使用小结

Git1.Git介绍Git是一个开源的分布式版本控制系统&#xff0c;是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件&#xff0c;Git可以使用本地创建仓库与网络仓库&#xff0c;解决了集中管理型版本控制软件存在的一些问题(CVS、VSS、SVN)。2.Gi…

sql server2008如何创建外键

原文地址&#xff1a;http://blog.csdn.net/zuozuo1245/article/details/8644115 以前创建数据库时就是有主键的创建了主键&#xff0c;但是表之间的关系没有联系&#xff0c;要建数据库关系图只有主键没有外键时不行的。 建外键的前提是此外键必须是另外一个表的主键。建外键的…

字符集_第07期:有关 MySQL 字符集的 SQL 语句

本篇为理清字符集的续篇(上一篇&#xff1a;第06期&#xff1a;梳理 MySQL 字符集的相关概念)&#xff0c;重点讲述字符集涉及到的 sql 语句用法。一、character introducer翻译过来就是字符引导。也就是针对字符串&#xff0c;显式的给定一个字符编码和排序规则&#xff0c;不…

怎么调整计算机显示屏,电脑显示器怎样调大屏幕

电脑显示器怎样调大屏幕你们知道怎么调整电脑显示器的屏幕吗?下面是应届毕业生小编带来的关于电脑显示器怎样调大屏幕的内容&#xff0c;欢迎阅读!电脑显示器怎样调大屏幕?以前的xp系统是在桌面点击右键然后选择属性&#xff0c;在属性里设置分辨率的。而win7则有点不同&…

win7打开计算机死机,win7系统进入桌面总是死机或者卡死怎么办

??最近有位深度技术win7旗舰版用户的电脑总是在进入桌面的时候莫名其妙的死机或者卡死&#xff0c;遇到这种情况我们应该怎么办呢&#xff1f;我们可以通重启资源管理器来解决屏幕卡死的问题&#xff0c;首先我们要打开任务管理器&#xff0c;下面由小编来跟大家介绍一下win7…

以太网例程_开关量转以太网的应用

由于工业以太网的快速冗余自愈能力以及实时性方面问题的逐步解决&#xff0c;工业以太网技术正在逐步深入至工业控制网络的现场设备层应用&#xff0c;即直接基于工业以太网通信来控制现场设备的运行&#xff0c;利用开关量控制模块提供的以太网转开关量功能&#xff0c;计算机…

CPU缓存越大计算机的性能越好,CPU缓存真的越大越好?小心你的钱包

除了内存和硬盘&#xff0c;电脑还有一种超快速的存储设备&#xff0c;就是CPU缓存当你想到你电脑当中的存储设备时&#xff0c;你可能想到的是DDR内存、显卡上的显存、或者更有可能只是机械硬盘和SSD。但其实还有一种超快速的存储设备&#xff0c;对我们习以为常的、现代电脑的…

jvm 参数-server_JVM选项:-client vs -server

jvm 参数-server您是否曾经在运行Java应用程序时想知道-client或-server开关是什么&#xff1f; 例如&#xff1a; javaw.exe -client com.blogspot.sdoulger.LoopTest也显示在java.exe的“帮助”中&#xff0c;例如&#xff0c;其中的选项包括&#xff1a; -client选择“客户…

小米3显示sim卡无服务器,小米手机无服务怎么解决

原标题&#xff1a;小米手机无服务怎么解决方法一&#xff1a;1.第一步是检查电话卡是否正确插入卡槽中。这种情况也会发生很长时间。如果未正确插入卡插槽&#xff0c;则将导致无法维修。2.要注意的第二件事是&#xff0c;如果所购买的小米手机是电信版的&#xff0c;那么插入…