Guava中的Joiner和Splitter

news/2024/10/10 15:53:58/文章来源:https://www.cnblogs.com/Naylor/p/18456515

目录
  • Guava 介绍
  • Joiner
    • list转string
    • map转string
    • 处理嵌套集合
    • 处理null值
  • Splitter
    • string转list
    • string转map
    • 多个拆分符
  • 输出
  • 代码

Guava 介绍

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

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

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

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

  • 3. 并发工具,Guava 包含了用于并发编程的工具,例如 ListenableFuture,它是对 Java Future 的扩展,允许注册回调以处理异步结果。

  • 4. 字符串处理,提供了 Strings 工具类,用于字符串的操作和处理,例如空值检查、连接字符串等。

  • 5. IO 工具,Guava 包含了对输入输出的支持,提供了 Files 和 ByteStreams 类,简化文件读写和字节流操作。

  • 6. 哈希与编码,Guava 提供了强大的哈希函数和编码工具,支持生成 MD5、SHA-1 等散列值,并提供 Base64 编码和解码。

  • 7. 范围,Range 类允许定义一组连续的值,这对于处理数值范围或时间范围非常有用。

  • 8. 图形数据结构,Guava 还支持图形数据结构(Graph),方便表示节点和边的关系,适合进行网络和路径分析等应用。

  • 9. Preconditions,提供了 Preconditions 类,用于简化参数验证和检查,帮助开发者在方法开头快速检查输入条件。

  • 10. 扩展 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

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

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

相关文章

十二、pytorch的基础知识

1、快捷命令2、TensorTensor是PyTorch中重要的数据结构,可认为是一个高维数组。它可以是一个数(标量)、一维数组(向量)、二维数组(矩阵)以及更高维的数组。Tensor和Numpy的ndarrays类似,但Tensor可以使用GPU进行加速。Tensor的基本使用: from __future__ import print…

还在花钱做GIS影像切片?GISBox帮你免费搞定!

GIS影像切片是指将大范围的地理影像数据切割成多个小块,以便更高效地存储、处理和显示。这种技术广泛应用于地图服务、地理信息系统(GIS)、三维可视化等领域,尤其在需要显示大规模地理数据时,通过切片可以显著提升渲染速度和用户体验。目前许多提供GIS影像切片服务的产品都…

硬货!Zabbix监控AIX系统服务案例

本文将介绍如何使用Zabbix自定义键值脚本方式监控AIX 系统IBM CICS中间件进程服务以及日志文件等信息。 Customer Information Control System (CICS) Transaction Server 是 IBM 针对 z/OS 的多用途事务处理软件。这是一个功能强大的应用程序服务器,用于大型和小型企业中的事…

获取pytdx行情服务器ip和port

之前一直用的api.connect(124.71.187.122, 7709)突然不能用了,调查了一下,给出如下解决方案 打开通达信客户端,选项->通讯设置。勾掉"登录时查找最快的主站",手动选择"行情主站",点确定。 点击"选项"中的"断开行情主站",再点…

SpingSecurity认证流程与使用

1、Security的本质: SpringSecurity的本质就是一个过滤器链,内部包含了提供各种功能的过滤器,基本案例中的过滤器链如下图所示(仅展示了部分核心过滤器)UsernamePasswordAuthenticationFilter:负责处理我们在登陆页面填写了用户名密码后的登陆请求。基本案例的认证工作主要…

3个步骤轻松集成Push Kit,实现App消息推送

推送通知作为App重要的消息传递工具,广泛应用于电子商务、社交媒体、旅游交通等领域的通知场景。比如当应用有新功能或安全补丁时,系统将推送消息提醒用户及时更新;如果是航班出行类的应用,会发送最新的班次时间表给用户,以确保及时提醒。推送通知是App与用户建立联系,保…

Set 新增的实用方法

有哪些新的 Set 方法呢? 总共有 7 个新的方法,分别是:intersection() 计算两个 Set 的 交集 union() 计算两个 Set 的 并集 difference() 计算两个 Set 的 差集 symmetricDifference() 取两个 Set 的 差集 的 并集 isSubsetOf() 判断 Set 是否是另一个 Set 的 超集 isDisjoi…

数据库认证有用吗?证书:职场晋升的有力助推器

在当今竞争激烈的就业市场中,拥有专业技能和相关证书成为了脱颖而出的关键。数据库证书便是这样一把开启职业成功之门的金钥匙,它对于找工作和升职加薪有着不可忽视的重要作用。 一、助力求职,脱颖而出 1. 增强竞争力 随着信息技术的飞速发展,各行各业对数据库管理和分析的…

【Ubuntu】在Ubuntu上安装IDEA

【Ubuntu】在Ubuntu上安装IDEA 零、前言 最近换了Ubuntu系统,但是还得是要写代码,这样就不可避免地用到IDEA,接下来介绍一下如何在Ubuntu上安装IDEA。 壹、下载 这一步应该很容易的,直接打开IDEA的下载页面,点击下载即可开始下载:https://www.jetbrains.com.cn/idea/down…

一维数组变二维数组

​前言 当出现相同的参数 根据另一个特定参数来改变数据 改变原因 如下图 出现相同的名字但是版本号不同 下拉框数据是 版本号 改变版本号时候改变这一条数据 所以 一个大数组中分为每个对象 每个对象两个参数 第一个参数: 是选中的版本号 第二个参数是相同名字的数据组成…

实验二 C语言分支与循环基础应用编程-1

task1.c #include <stdio.h> #include <stdlib.h> #include <time.h>#define N 5 #define N1 397 #define N2 476 #define N3 21int main(){ int cnt; int random_major,random_no; srand(time(NULL));//以当前系统时间作为随机种子 cnt=0; while(cnt<N){…

SIGGRAPH Asia 2024 | 网易伏羲研究成果入选,3D面部动画技术再获新突破

近日,国际计算机图形与交互技术顶会SIGGRAPH Asia 2024公布论文接收结果:网易伏羲最新研究成果《FreeAvatar: Robust 3D Facial Animation Transfer by Learning an Expression Foundation Model》成功入选。今年12月,SIGGRAPH Asia 2024大会将在日本东京举行,届时网易伏羲…