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

Java范思哲 2019-06-14 14:41:29 ⋅ 103 阅读

前言

Guava 28.0 发布了,Guava 是 Google 的一个开源项目,包含许多 Google 核心 Java 常用库,如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 与 I/O 等。

新特性

  • collect:为某些 Queues 方法添加了基于 Duration 的重载 (21d06cf)

  • net:为 application/geo+json 添加了 MediaType (36cd5cf)

  • net:为 HttpHeaders添加了许多常量

  • concurrent:删除了已弃用的 CheckedFuture 及相关实用程序 (3dd22fe)

  • concurrent:为许多方法添加了基于 Duration 的重载

  • concurrent:从setFuture中删除了 @Beta (5ec1360)

  • concurrent:新增弃用的 FluentFuture.from(FluentFuture) 以指出冗余代码 (f9f2807)

  • graph:新增 GraphBuilder.immutable()ValueGraphBuilder.immutable() 和 NetworkBuilder.immutable(),用于以流畅的方式构建不可变图形

  • J2ObjC:修复了使用 ImmutableMap.entrySet()导致的崩溃 (74fc49f)

Maven依赖

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.0-jre</version>
<!-- or, for Android: -->
<version>28.0-android</version>
</dependency>

下载地址及更新说明

https://github.com/google/guava/releases/tag/v28.0

快速入门

引入maven依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.0-jre</version>
<!-- or, for Android: -->
<version>28.0-android</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
// 接上一个,内部类的引用,得到分割器,将字符串解析为map
Splitter.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完全可以满足,让代码更简洁高效。

实用案例

微服务架构实战篇(五):Spring boot2.x + Guava 并使用RateLimiter实现秒杀限流demo

---------------END----------------

后续的内容同样精彩

长按关注“IT实战联盟”哦




全部评论: 0

    我有话说:

    「开源资讯」Guava 28.2 发布GoogleJava 核心工具

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

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

    Guava是对Java API的补充,对Java开发中常用功能进行更优雅的实现,使得编码更加轻松,代码容易理解。

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

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

    Poppler 21.01.0 发布,PDF 生成工具

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

    工具集001

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

    Gradle 5.0 RC2 发布,支持 Java 11、Kotlin DSL 生产就绪

    Gradle 5.0 RC2 发布了,Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化构建工具,支持依赖管理和多项目,类似 Maven,但比之简单轻便。

    GitHub精选:2018年11月份最热门的Java开源项目

    又到了揭晓 11 月份最热门 Java 开源项目排名的时候了,在本月的名单中,出现了几个新面孔,如Java 核心知识、轻量级容错组件Resilience4j .....

    最全Mac工具

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

    精品推荐:Java核心数据结构(List,Map,Set)使用技巧与优化

    JDK提供了一组主要的数据结构实现,如List、Map、Set等常用数据结构。这些数据都继承自 java.util.Collection 接口,并位于 java.util 包内。

    Jenkins 2.285 发布Java 编写的持续集成工具

    Jenkins 是一款由 Java 编写的开源的持续集成工具。Jenkins 提供了软件开发的持续集成服务。它运行在 Servlet 容器中(例如 Apache Tomcat)。它支持软件配置管理

    Jenkins 2.288 发布Java 编写的持续集成工具

    Jenkins 是一款由 Java 编写的开源的持续集成工具。Jenkins 提供了软件开发的持续集成服务。它运行在 Servlet 容器中(例如 Apache Tomcat)。它支持软件配置管理

    Eclipse OpenJ9 v0.23.0 发布Java 虚拟机

    Eclipse OpenJ9 v0.23.0发布,Eclipse OpenJ9 是 OpenJDK 的 JVM,此 Java 虚拟机经过优化,具备占用空间小、启动速度快以及吞吐量高等优势。 新

    精品推荐:一览GitHub上最受程序欢迎的5大Java开源项目

    列举了GitHub上一些最流行的Java项目。从Mockitos到Guava,以及 java-design-patterns等供大家学习。

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

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

    程序员笔记 CherryTree 0.99.28 发布

    CherryTree 0.99.28 现已发布。CherryTree 是一个支持无限层级分类的笔记软件,Python 编写,支持富文本编辑和代码高亮,支持 Linux 和 Windows

    Java 零注解文档生成工具—smart-doc,看完有替换swagger的冲动

    Tips:喜欢的话可以关注小萌哦~~~今天小萌给大家推荐的一个开源Java Restful API 文档生成

    微信开发神器全能微信Java开发工具包

    必须分享的微信神器 weixin-java-tools

    smart-doc 2.0.0 重磅发布Java 零注解 API 文档生成工具

    smart-doc是一款同时支持java restful api和apache dubbo rpc接口文档生成的工具,smart-doc颠覆了传统类似swagger这种大量采用注解侵入来生成文档的

    2018常用JavaScript类

    9个非常有用的Javascript来加速你的开发。