Google Code:Google guava工具类快速使用

花名提莫 2018-07-04 15:44:38 ⋅ 784 阅读


什么是工具类

工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率。谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来。

Google guava工具类特点

Guava是对Java API的补充,对Java开发中常用功能进行更优雅的实现,使得编码更加轻松,代码容易理解。Guava使用了多种设计模式,同时经过了很多测试,得到了越来越多开发团队的青睐。Java最新版本的API采纳了Guava的部分功能,但依旧无法替代。
*   高效设计良好的API,被Google的开发者设计,实现和使用
*   遵循高效的java语法实践
*   使代码更刻度,简洁,简单
*   节约时间,资源,提高生产力  Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:
1.  集合 [collections]
2.  缓存 [caching]
3.  原生类型支持 [primitives support]
4.  并发库 [concurrency libraries]
5.  通用注解 [common annotations]
6.  字符串处理 [string processing]
7.  I/O 等等。

Guava 使用(引入maven依赖)

pom.xml
<dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
        </dependency>

备注:版本大家可以自选

Guava 集合示例

普通的Collection集合
List<String> list = Lists.newArrayList();
Set<String> set = Sets.newHashSet();
Map<String, String> map = Maps.newHashMap();
Guava的不可变集合创建
ImmutableList<String> iList = ImmutableList.of("a", "b", "c");
ImmutableSet<String> iSet = ImmutableSet.of("e1", "e2");
ImmutableMap<String, String> iMap = ImmutableMap.of("k1", "v1", "k2", "v2");
immutable 不可变对象特点
1.在多线程操作下,是线程安全的。

2.所有不可变集合会比可变集合更有效的利用资源。

3.中途不可改变

Map-List 对比

普通写法
1. Map<String,List<Integer>> map = new HashMap<String,List<Integer>>();
2. List<Integer> list = new ArrayList<Integer>();
3. list.add(1);
4. list.add(2);
5. map.put("test", list);    System.out.println(map.get("test"));
#需要5步,执行结果[1, 2]
Guava写法
1. Multimap<String,Integer> mapM = ArrayListMultimap.create();
2. mapM.put("test",1);
3. mapM.put("test",2);
    System.out.println(mapM.get("test"));
#需要3步,执行结果[1, 2]

备注:执行结果都一样,但是代码少了近一半哦~~~

Guava 字符串连接器Joiner

连接多个字符串并追加到StringBuilder
StringBuilder stringBuilder = new StringBuilder("嗨,");
// 字符串连接器,以|为分隔符,同时去掉null元素
Joiner joiner1 = Joiner.on("|").skipNulls();
// 构成一个字符串jim|jack|kevin并添加到stringBuilder
stringBuilder = joiner1.appendTo(stringBuilder, "jim", "jack", null, "kevin"); System.out.println(stringBuilder);

执行结果:嗨,jim|jack|kevin

将Map转化为字符串
Map<String, String> testMap = Maps.newLinkedHashMap();
        testMap.put("Cookies", "12332");
        testMap.put("Content-Length", "30000");
        testMap.put("Date", "2018.07.04");
        testMap.put("Mime", "text/html");        
       // 用:分割键值对,并用#分割每个元素,返回字符串        String returnedString = Joiner.on("#").withKeyValueSeparator(":").join(testMap);        System.out.println(returnedString);

执行结果:Cookies:12332#Content-Length:30000#Date:2018.07.04#Mime:text/html

将字符串转化为Map
// 接上一个,内部类的引用,得到分割器,将字符串解析为mapSplitter.MapSplitter ms = Splitter.on("#").withKeyValueSeparator(':');        
Map<String, String> ret = ms.split(returnedString);        
for (String it2 : ret.keySet()) {    System.out.println(it2 + " -> " + ret.get(it2));  }

执行结果:
Cookies -> 12332
Content-Length -> 30000
Date -> 2018.07.04
Mime -> text/html

字符串工具类Strings
System.out.println(Strings.isNullOrEmpty("")); // true
System.out.println(Strings.isNullOrEmpty(null)); // true
System.out.println(Strings.isNullOrEmpty("hello")); // false// 将null转化为"" System.out.println(Strings.nullToEmpty(null)); // "" // 从尾部不断补充T只到总共8个字符,如果源字符串已经达到或操作,则原样返回。类似的有padStart
System.out.println(Strings.padEnd("hello", 8, 'T')); // helloTTT

字符匹配器CharMatcher

空白替换
// 空白回车换行对应换成一个#,一对一换
String stringWithLinebreaks = "hello world\r\r\ryou are here\n\ntake it\t\t\teasy";
String s6 = CharMatcher.BREAKING_WHITESPACE.replaceFrom(stringWithLinebreaks,'#'); System.out.println(s6);

执行结果:hello#world###you#are#here##take#it###easy

连续空白缩成一个字符
// 将所有连在一起的空白回车换行字符换成一个#,倒塌
String tabString = "  hello   \n\t\tworld   you\r\nare             here  ";
String tabRet = CharMatcher.WHITESPACE.collapseFrom(tabString, '#'); System.out.println(tabRet);

执行结果: #hello#world#you#are#here#

去掉前后空白和缩成一个字符
// 在前面的基础上去掉字符串的前后空白,并将空白换成一个#
String trimRet = CharMatcher.WHITESPACE.trimAndCollapseFrom(tabString, '#'); System.out.println(trimRet);

执行结果: hello#world#you#are#here

保留数字
String letterAndNumber = "1234abcdABCD56789";// 保留数字
String number = CharMatcher.JAVA_DIGIT.retainFrom(letterAndNumber); System.out.println(number);

执行结果:123456789

备注

好了,就介绍到这里了,大家经常用的工具类Guava完全可以满足,让代码更简洁高效。

参考文献
Getting Started With Google Guava

关注我们

更多精彩内容请关注“IT实战联盟”哦~~~


全部评论: 0

    我有话说:

    「开源资讯」Guava 28.2 发布,Google 的 Java 核心工具

    前言 Guava 28.2 发布了,GuavaGoogle 的一个开源项目,包含许多 Google 核心 Java 常用库,如:集合 [collections] 、缓存 [caching

    Google发布Java 核心工具库——Guava 28.0

    Guava是一种基于开源的Java库,其中包含谷歌正在由他们很多项目使用的很多核心库。这个库是为了方便编码,并减少编码错误。这个库提供用于集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和

    工具集001

      1.  Google项目管理工具 Tables   2. 终端 taskwarrior --- TODO List Taskwarrior is

    Google 宣布正式开源 Jib ,帮助 Java 应用快速容器化

    Google 本周宣布开源一款新的 Java 工具 Jib ,旨在让开发者使用他们熟悉的工具更轻松地将 Java 应用程序容器化。

    Google 将仅允许使用 OAuth 访问账户,开发者懵了

    真的是在保护 Google 帐户的安全性?

    工具集002

      文件对比 https://www.diffchecker.com/excel-diff 快速找出类似文件的不同之处。  

    最全Mac工具

      MacTool Mac 开源免费工具汇总, 只罗列开源好用的。更全列表请参考awesome-mac 必备 Homebrew - 体验通过命令行安装 Mac 软件的工具(大部分是

    Google技术:你不了解Google最新发布的JS代码规范 的最佳实践

    Google为了那些还不熟悉代码规范的人发布了一个JS代码规范。其中列出了编写简洁易懂的代码所应该做的最佳实践。

    TestableMock v0.6.0 发布,新增测试参数快速构造工具

    项目介绍 TestableMock是一款由阿里效能团队开源的Java单元测试增强工具,提供四项具有针对性的辅助能力: 快速Mock任意调用:解决传统Mock工具使用繁琐的问题 访问被测私有成员

    Newbe.ObjectVisitor C# 反射工具包

    Newbe.ObjectVisitor 帮助开发者可以用最简单的最高效的方式访问一个普通 class 的所有属性。从而实现:验证、映射、收集等等操作。 例如, 在你的代码中有这样一个简单的

    Poppler 21.01.0 发布,PDF 生成工具

    Poppler 21.01.0 发布了。 Poppler 是从 Xpdf 3.0 代码库派生而来的 PDF 生成工具包。Poppler 使用了各种 PDF 库(Evince,Okular

    京东技术:Protobuf-3.6.1 安装及 Golang 使用

    Protobuf 是 Google 开发的一种数据描述语言,能够将结构化的数据序列化,可用于数据存储,通信协议等方面。官方版本支持 Go,C++,Java,Python,社区版本支持更多语言。

    WeCube 2.7.0 版本发布,一站式架构和运维管理工具

    WeCube简介 微众银行在分布式架构实践的过程中,发现将银行核心系统构建于分布式架构之上,会遇到一些与传统单体应用不同的痛点(例如,服务器增多,部署难度大;调用链长,全链路跟踪困难; 系统复杂,问题定位时间长等),在逐步解决这些痛点的过程中,总...

    Docker - 大数据环境快速搭建步骤

    快速搭建一个大数据的环境,我们可以使用Docker来实现,文章会演示如何使用

    GoAccess 1.4.4 发布,日志分析工具

    GoAccess 1.4.4 发布了。GoAccess 是一个基于终端的快速日志分析器。其核心思想是实时快速分析和查看 Web 服务器统计信息,而无需使用浏览器,适合希望通过 SSH 快速分析访问日

    Visual Studio Code 1.51 发布

    Visual Studio Code 1.51 稳定版已发布。 更新亮点 支持自定义智能提示面板的大小 此版本对智能提示面板的 UI 进行了改进,拖动控件的侧边或角端即可调整大小。 突出被固定的

    Visual Studio Code 1.52 发布

    Visual Studio Code 1.52 稳定版已发布,该版本主要专注于处理 GitHub 相关问题和拉取请求。同时带来了一些新功能和设置,其中一些主要亮点内容如下: diff