Guava中的Joiner和Splitter
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
Guava中的Joiner和Splitter的更多相关文章
- guava之Joiner 和 Splitter
最近在给客户准备一个Guava的分享,所以会陆续的更新关于Guava更多的细节分享.本文将记录Guava中得字符串处理Joiner(连接)和Splitter(分割)处理. Joiner 首先我们来看看 ...
- guava之Joiner 和 Splitter(转)
最近在给客户准备一个Guava的分享,所以会陆续的更新关于Guava更多的细节分享.本文将记录Guava中得字符串处理Joiner(连接)和Splitter(分割)处理. Joiner 首先我们来看看 ...
- Guava中Predicate的常见用法
Guava中Predicate的常见用法 1. Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...
- Java经典类库-Guava中的函数式编程讲解
如果我要新建一个java的项目,那么有两个类库是必备的,一个是junit,另一个是Guava.选择junit,因为我喜欢TDD,喜欢自动化测试.而是用Guava,是因为我喜欢简洁的API.Guava提 ...
- guava中eventbus注解使用
guava是 google 几个java核心类库的集合,包括集合.缓存.原生类型.并发.常用注解.基本字符串操作和I/O等等.学会使用该库相关api的使用,能使我们代码更简洁,更优雅,本章节我们来谈谈 ...
- Google Guava中的前置条件
前置条件:让方法调用的前置条件判断更简单. Guava在Preconditions类中提供了若干前置条件判断的实用方法,我们建议[在Eclipse中静态导入这些方法]每个方法都有三个变种: check ...
- Google guava 中的Monitor
synchronized 自从Java提供了多线程编程,我们经常需要处理这样的情况:在特定的时间,我们需要限制访问,确保只有一个线程访问我们的代码.Java提供了同步关键字synchronized来实 ...
- Guava中TreeRangeMap基本使用
RangeMap跟一般的Map一样.存储键值对,依照键来取值.不同于Map的是键的类型必须是Range,也既是一个区间.RangeMap在Guava中的定义是一个接口: public interfac ...
- Guava中Lists.partition(List, size) 方法懒划分/懒分区
目录 Guava中Lists.partition(List, size) 方法懒划分/懒分区 背景 分析 总结 Guava中Lists.partition(List, size) 方法懒划分/懒分区 ...
- Guava中这些Map的骚操作,让我的代码量减少了50%
原创:微信公众号 码农参上,欢迎分享,转载请保留出处. Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合.缓存.并发.I/O等多个方面.使用这些API一方面 ...
随机推荐
- python __del__() 清空对象
python __del__() 清空对象 python垃圾回收机制:当一个对象的引用被完全清空之后,就会调用__del__()方法来清空这个对象 当对象的引用没有被完全清空时,代码如下: class ...
- windows环境xampp搭建php电商项目/搭建禅道
windows环境xampp搭建php论坛/电商项目 一,首先下载xampp https://www.apachefriends.org/zh_cn/index.html 下载之后解压到E盘或者F盘的 ...
- golang对遍历目录操作的优化
一转眼go1.23都快发布了,时间过得真快. 不过今天我们把时间倒流回三年半之前,来关注一个在go1.16引入的关于处理目录时的优化. 对于go1.16的新变化,大家印象最深的可能是io包的大规模重构 ...
- 8、IDEA集成Git
8.1.配置Git忽略文件 8.1.1.忽略文件的原因 在使用 IDE 工具时,会自动生成一些和项目源码无关的文件,所以可以让 Git 忽略这些文件. 此外,把这些无关文件忽略掉,还能够屏蔽不同 ID ...
- 【Java】 Springboot+Vue 大文件断点续传
同事在重构老系统的项目时用到了这种大文件上传 第一篇文章是简书的这个: https://www.jianshu.com/p/b59d7dee15a6 是夏大佬写的vue-uploader组件: htt ...
- 从.net开发做到云原生运维(一)——从.net framework过渡到.net core
1. 前言 序篇讲了自己的一些感悟和经历,从这章开始就开始讲一些.net技术栈的东西了. 2. .net framework和.net core对比 .NET Framework 概述 .NET Fr ...
- git 如何处理合并时存在的子模块冲突
如果另一个分支的子模块不同于当前分支,那么在拉取下来时,并不会更新本地子模块的版本,而会出现一个.diff文件,表示差异性.那么在合并代码时,可能会因为这个.dff文件冲突无法解决.产生这个问题的原因 ...
- lua环境配置与编译
1.背景 2.安装lua 官方下载地址:https://joedf.ahkscript.org/LuaBuilds/ 下载后解压即可 解压后: 配置环境变量: 检查是否安装成功: 如果能输出版本号,则 ...
- volatile重要特性-可见性,避免指令重排序-案例讲解
1.背景 volatile 修饰的作用???? 什么是可见性?? 什么是指令重排序?? 2.可见性-案例 package com.my.aqs; /** * @Copyright (C) XXXXX技 ...
- 23 暑假友谊赛 No.4(UKIEPC 2017)
23 暑假友谊赛 No.4(UKIEPC 2017) Problem A Alien Sunset hh,开始一眼差分,但是写寄了qwq,后来换枚举过了(Orz,但是看学长差分是能做的,我就说嘛,差分 ...