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的更多相关文章

  1. guava之Joiner 和 Splitter

    最近在给客户准备一个Guava的分享,所以会陆续的更新关于Guava更多的细节分享.本文将记录Guava中得字符串处理Joiner(连接)和Splitter(分割)处理. Joiner 首先我们来看看 ...

  2. guava之Joiner 和 Splitter(转)

    最近在给客户准备一个Guava的分享,所以会陆续的更新关于Guava更多的细节分享.本文将记录Guava中得字符串处理Joiner(连接)和Splitter(分割)处理. Joiner 首先我们来看看 ...

  3. Guava中Predicate的常见用法

    Guava中Predicate的常见用法 1.  Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...

  4. Java经典类库-Guava中的函数式编程讲解

    如果我要新建一个java的项目,那么有两个类库是必备的,一个是junit,另一个是Guava.选择junit,因为我喜欢TDD,喜欢自动化测试.而是用Guava,是因为我喜欢简洁的API.Guava提 ...

  5. guava中eventbus注解使用

    guava是 google 几个java核心类库的集合,包括集合.缓存.原生类型.并发.常用注解.基本字符串操作和I/O等等.学会使用该库相关api的使用,能使我们代码更简洁,更优雅,本章节我们来谈谈 ...

  6. Google Guava中的前置条件

    前置条件:让方法调用的前置条件判断更简单. Guava在Preconditions类中提供了若干前置条件判断的实用方法,我们建议[在Eclipse中静态导入这些方法]每个方法都有三个变种: check ...

  7. Google guava 中的Monitor

    synchronized 自从Java提供了多线程编程,我们经常需要处理这样的情况:在特定的时间,我们需要限制访问,确保只有一个线程访问我们的代码.Java提供了同步关键字synchronized来实 ...

  8. Guava中TreeRangeMap基本使用

    RangeMap跟一般的Map一样.存储键值对,依照键来取值.不同于Map的是键的类型必须是Range,也既是一个区间.RangeMap在Guava中的定义是一个接口: public interfac ...

  9. Guava中Lists.partition(List, size) 方法懒划分/懒分区

    目录 Guava中Lists.partition(List, size) 方法懒划分/懒分区 背景 分析 总结 Guava中Lists.partition(List, size) 方法懒划分/懒分区 ...

  10. Guava中这些Map的骚操作,让我的代码量减少了50%

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合.缓存.并发.I/O等多个方面.使用这些API一方面 ...

随机推荐

  1. ios证书免费分享

    首先,ios证书能不能分享给别人使用,能否用别人的证书打包呢? 这个问题的答案在技术上是肯定可以的,但是我要解释一下,技术上可以,不代表真的就可以这样做,为什么呢? 首先,假如用别人的苹果开发者账号的 ...

  2. pytest数据驱动(最简单)

    pytest数据驱动(最简单) 第一种:通过yaml文件获取数据(一维列表) data.yaml文件内容如下: - '软件测试'- '单元测试'- '自动化测试'- '性能测试'- '测试开发'- ' ...

  3. Mysql函数12-DATE_FORMAT

    DATE_FORMAT函数用于日期格式的转换. 1.sql查询出一列create_time select create_time from goods where id=65 2.让create_ti ...

  4. Python列表、元组、字典和集合的用法

    1.列表 标志符号是[],元素可以修改.删除和新增 1.1 提取元素(索引从0开始计算) testList=['A','B','C',1,'D'] print(testList[1]) #打印索引区间 ...

  5. 【DataBase】MySQL 11 SQL函数 单行函数其五 流程控制函数 & 单行函数总结

    SQL函数其五 流程控制函数 & 单行函数总结 视频参考自:P43 - P52 https://www.bilibili.com/video/BV1xW411u7ax  单IF函数使用 -- ...

  6. 外形最漂亮的人形机器人——通用机器人Apollo,设计为可以在任何任务和环境中与人类进行协作

    视频地址: https://www.bilibili.com/video/BV11F4m1M7ph/

  7. VSCODE远程调试中如何开启X11转发实现APP屏幕转发

    本文所要做的事情不做过多解释,本文前提是使用本地window10上的VScode远程调试Ubuntu上的代码,在该过程中我们需要查看可视化显示,为此我们使用VSCODE插件来实现X11转发. VSco ...

  8. C# 反射以及实际场景使用

    1 什么是反射 首先要复习一下C#的编译过程,可以解释为下图 其中dll/exe中,包括元数据(metadata)和IL(中间语言Intermediate Language) 另外还出现的其他名词:C ...

  9. 如何快速在 Apache DolphinScheduler 新扩展一个任务插件?

    作者 | 代立冬 编辑 | Debra Chen Apache DolphinScheduler 是现代数据工作流编排平台,具有非常强大的可视化能力,DolphinScheduler 致力于使数据工程 ...

  10. [最新] Chrome 添加 Cookie 标红的解决方法(测试于119)

    最近发现 Chrome 开发人员工具里无法添加 Cookie,输入名称时整行变红,而且不会自动补充域.大小.过期时间等项. 网上搜全都是 Chrome 96 要开 Partitioned Cookie ...