Guava极简教程 - Joiner和Splitter

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Guava是Google开发的一个开源Java库,增强了Java标准库的核心功能。它提供了多种工具和集合类,如不可变集合、多映射、缓存、并发工具、字符串处理、I/O工具、哈希与编码、范围、图形数据结构及参数验证等,使开发更高效、代码更简洁。`Joiner`用于将集合转换为字符串,支持分隔符和键值分隔符自定义;`Splitter`则用于将字符串拆分为集合,支持多个分隔符和空字符串忽略。更多详情及示例代码可见:[项目地址](https://gitee.com/naylor_personal/ramble-spring-boot/tree/master/guava)。

[toc]

Guava 介绍

Guava 是 Google 开发的一个开源 Java 库,提供一系列核心功能增强 Java 的标准库。

它包含许多有用的工具和集合类,使 Java 开发更加高效,代码更加简洁、易于维护。

  • 集合工具, Immutable Collections: Guava 提供了不可变集合(如 ImmutableList, ImmutableSet, ImmutableMap),可以防止集合的意外修改。Multiset, Multimap, BiMap: 这些集合类型支持更复杂的场景,例如允许重复的元素(Multiset)、一个键映射到多个值(Multimap)和双向映射(BiMap)。

  • 缓存, Guava 提供了简单的缓存实现,允许开发者在内存中缓存数据,以提高应用程序性能。使用 CacheBuilder 可以轻松创建缓存,并支持过期策略和最大容量设置。、

  • 并发工具,Guava 包含了用于并发编程的工具,例如 ListenableFuture,它是对 Java Future 的扩展,允许注册回调以处理异步结果。
  • 字符串处理,提供了 Strings 工具类,用于字符串的操作和处理,例如空值检查、连接字符串等。
  • IO 工具,Guava 包含了对输入输出的支持,提供了 Files 和 ByteStreams 类,简化文件读写和字节流操作。
  • 哈希与编码,Guava 提供了强大的哈希函数和编码工具,支持生成 MD5、SHA-1 等散列值,并提供 Base64 编码和解码。
  • 范围,Range 类允许定义一组连续的值,这对于处理数值范围或时间范围非常有用。
  • 图形数据结构,Guava 还支持图形数据结构(Graph),方便表示节点和边的关系,适合进行网络和路径分析等应用。
  • Preconditions,提供了 Preconditions 类,用于简化参数验证和检查,帮助开发者在方法开头快速检查输入条件。
  • 扩展 Java API,Guava 还扩展了 Java 标准库的一些 API,如 Optional 类,用于处理可能为空的值,从而避免 NullPointerException。

Joiner

使用 Joiner 将集合转换为 String

list转string


/**
 * 使用 joiner 将 list 转换为字符串
 */
private static void joinerTest1() {
   
    List<String> names = Lists.newArrayList("r", "a", "m", "b", "l", "e");
    String result = Joiner.on(",").join(names);
    System.out.println(result);
}
  • on :用于指定字符串分隔符

map转string


/**
 * 使用 joiner 将 map 转换为字符串
 */
private static void joinerTest2() {
   
    Map<String, String> map = Maps.newHashMap();
    map.put("name", "ramble");
    map.put("tag", "technology");
    String result = Joiner.on(" , ").withKeyValueSeparator(" = ")
            .join(map);
    System.out.println(result);
}
  • withKeyValueSeparator:用于指定 key ,value 分隔符

处理嵌套集合


/**
 * 使用 joiner 将嵌套的 list 转换为字符串
 */
private static void joinerTest3() {
   
    List<ArrayList<String>> nested = Lists.newArrayList(
            Lists.newArrayList("spring", "banana", "orange"),
            Lists.newArrayList("cat", "dog", "bird"),
            Lists.newArrayList("John", "Jane", "Adam"));
    System.out.println("嵌套的集合=" + JSON.toJSONString(nested));
    String result = Joiner.on(";").join(Iterables.transform(nested,
            new Function<List<String>, String>() {
   
                @Override
                public String apply(List<String> input) {
   
                    return Joiner.on("-").join(input);
                }
            }));
    System.out.println(result);
}

处理null值


/**
 * 使用 joiner 时候对于 null 值的处理。
 * 使用 skipNulls() 忽略 null 值
 * 使用 useForNull() 将null值替换为指定的字符串
 * 注意: skipNulls() 和 useForNull() 不能同时使用
 */
private static void joinerTest4() {
   
    List<String> names = Lists.newArrayList("John", null, "Jane", "Adam", "Tom");
    String result = Joiner.on(",")
            // 忽略空值
            // .skipNulls()
            // 使用指定字符串替换空值
            .useForNull("我是null值")
            .join(names);
    System.out.println(result);
}
  • 使用 skipNulls() 忽略 null 值
  • 使用 useForNull() 将null值替换为指定的字符串
  • 注意: skipNulls() 和 useForNull() 不能同时使用

Splitter

使用 Splitter 将 String 拆分为一个集合

string转list


/**
 * 使用 splitter 将字符串转换为 list
 */
private static void splitterTest1() {
   
    String input = "apple - banana - orange";
    List<String> result = Splitter.on("-")
            // 用来删除前后空格
            .trimResults()
            .splitToList(input);
    System.out.println(JSON.toJSONString(result));
}
  • trimResults:用来删除元素前后空格

string转map


/**
 * 使用 splitter 将字符串转换为 map
 */
private static void splitterTest2() {
   
    String input = "John=first,Adam=second";
    Map<String, String> result = Splitter.on(",")
            .withKeyValueSeparator("=")
            .split(input);
    System.out.println(JSON.toJSONString(result));
}

多个拆分符


/**
 * 使用 splitter 将字符串转换为 list,使用多个分隔符
 */
private static void splitterTest3() {
   
    String input = "apple.banana,,orange,,.cml-";
    List<String> result = Splitter.onPattern("[.,-]")
            // 忽略空字符串
            .omitEmptyStrings()
            .splitToList(input);
    System.out.println(JSON.toJSONString(result));
}
  • omitEmptyStrings:用来忽略空字符串

输出

上述示例代码输出结果:


r,a,m,b,l,e
name = ramble , tag = technology
嵌套的集合=[["spring","banana","orange"],["cat","dog","bird"],["John","Jane","Adam"]]
spring-banana-orange;cat-dog-bird;John-Jane-Adam
John,我是null值,Jane,Adam,Tom
["apple","banana","orange"]
{"John":"first","Adam":"second"}
["apple","banana","orange","cml"]

代码

https://gitee.com/naylor_personal/ramble-spring-boot/tree/master/guava

目录
相关文章
Guava - Maps.difference
Guava - Maps.difference
615 0
|
Java
Guava Lists工具类
Guava Lists工具类
78 0
|
API
Google Guava之Splitter
我们上篇文章讲述了Joiner相关API使用,其中提到了Splitter,它与Joiner操作相反,它是根据给定的分隔符,把一个字符串分隔成若个子字符串,那么本篇我们来看看Splitter都有哪些操作的方式。
218 0
Google Guava之Splitter
|
API
Google Guava之Maps&Lists&Sets
日常开发中,使用最多的就是集合了,所以避免不了对集合的各种操作,本篇文章来看一下,Guava中都有哪些常用的集合操作的API可以简化我们的代码。
234 0
Google Guava之Maps&Lists&Sets
|
缓存 移动开发 安全
Guava基本工具包Base:Null和字符串分割(Splitter)、拼接(Joiner)处理
Guava基本工具包Base:Null和字符串分割(Splitter)、拼接(Joiner)处理
466 0
Guava基本工具包Base:Null和字符串分割(Splitter)、拼接(Joiner)处理
|
Java
Guava-Objects使用
Java中的Object提供了很多方法供所有的类使用,特别是toString、hashCode、equals、getClass等方法,在日常开发中作用很大,Guava中包含Objects类,其提供了很多更为强大的方法。
131 0
|
Java 程序员
Guava翻译之Strings
guava翻译系列
1756 0
|
Java 测试技术 程序员
Guava翻译系列之File
guava翻译系列
2953 0
|
Java 缓存 设计模式
Guava翻译之Functional
guava翻译系列
1753 0
guava学习:guava集合类型-table
最近学习了下guava的使用,这里简单记录下一些常用并且使用的工具类把。 看到table的使用时候真的是眼前一亮,之前的代码中写过很多的Map 这种格式的代码,这种阅读起来非常的不友好,甚至都不知道map中的key到底是什么还要联系上下文联想才可以,而table类型的出现彻底解决掉了这个麻烦。
1545 0