Java开源工具库Guava使用指南

Guava是一个功能强大的Java开源工具库,提供了很多实用的工具类和函数,可以简化开发过程。本文将介绍Guava的一些基本用法和常用功能。

添加Guava依赖

在开始使用Guava之前,首先需要在项目中添加Guava的依赖。可以通过Maven或Gradle来管理依赖。

Maven:

<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.1-jre</version>
</dependency>

Gradle:

implementation 'com.google.guava:guava:30.1-jre'

字符串处理

Guava提供了一些用于字符串处理的工具类和函数,可以方便地进行字符串操作。以下是一些常用的方法:

  • Strings.isNullOrEmpty(String):判断字符串是否为null或空字符串。
  • Strings.nullToEmpty(String):将null转换为空字符串。
  • Strings.emptyToNull(String):将空字符串转换为null。
  • Strings.repeat(String, int):重复某个字符串指定的次数。
  • Strings.padStart(String, int, char):在字符串的开头添加指定的字符,使其达到指定的长度。
  • Strings.padEnd(String, int, char):在字符串的末尾添加指定的字符,使其达到指定的长度。

集合操作

Guava提供了一套强大的集合操作工具,使得集合的处理更加简便和高效。以下是一些常用的集合操作方法:

  1. 创建集合:

    • ImmutableList.of(element1, element2, ...):创建一个不可变的列表。
    • ImmutableSet.of(element1, element2, ...):创建一个不可变的集合。
    • ImmutableMap.of(key1, value1, key2, value2, ...):创建一个不可变的映射。
    • ImmutableMultimap.of(key1, value1, key2, value2, ...):创建一个不可变的多重映射。
  2. 集合操作:

    • Iterables.filter(Iterable, Predicate):过滤集合中满足条件的元素。
    • Iterables.transform(Iterable, Function):对集合中的每个元素进行转换。
    • Iterables.concat(Iterable1, Iterable2, ...):将多个集合合并成一个新的集合。
    • Iterables.partition(Iterable, int):将集合分成指定大小的子集。
  3. 集合排序:

    • Ordering.natural():自然排序。
    • Ordering.from(Comparator):根据给定的Comparator进行排序。
    • Ordering.compound(Iterable):使用多个排序规则进行排序。
    • Collections.sort(List, Comparator):对列表进行排序。
  4. 集合处理:

    • Lists.newArrayList(element1, element2, ...):创建一个可变的列表。
    • Sets.newHashSet(element1, element2, ...):创建一个可变的集合。
    • Maps.newHashMap():创建一个可变的映射。
    • Multimaps.newListMultimap():创建一个可变的多重映射。

缓存

Guava的缓存工具类使得缓存的使用变得更加简单和高效。以下是一些常用的缓存操作方法:

  1. 创建缓存:

    • CacheBuilder.newBuilder().build():创建一个简单的缓存。
    • CacheBuilder.newBuilder().maximumSize(long).build():设定缓存的最大容量。
    • CacheBuilder.newBuilder().expireAfterAccess(duration, TimeUnit).build():设置缓存项在指定时间内没有被访问后失效。
    • CacheBuilder.newBuilder().expireAfterWrite(duration, TimeUnit).build():设置缓存项在指定时间内没有被写入后失效。
  2. 缓存操作:

    • cache.put(key, value):将键值对放入缓存。
    • cache.getIfPresent(key):根据键获取缓存中的值。
    • cache.get(key, Callable):根据键获取缓存中的值,如果不存在则使用给定的Callable来计算并放入缓存。
    • cache.invalidate(key):根据键使缓存中的值失效。
    • cache.invalidateAll():使缓存中的所有值失效。

函数式编程

Guava提供了一些函数式编程的支持,可以更方便地进行函数操作。以下是一些常用的函数式编程方法:

  • Function:定义了一个函数接口,可以进行函数转换和组合。
  • Predicate:定义了一个断言接口,可以进行元素过滤。
  • Supplier:定义了一个供应商接口,可以生成值。
  • Optional:定义了一个可选值接口,可以处理可能为空的值。

异常处理

Guava提供了一些异常处理的工具类和函数,可以方便地进行异常处理。以下是一些常用的异常处理方法:

  • Throwables.getCause(Throwable):获取异常的原因。
  • Throwables.getRootCause(Throwable):获取异常的根原因。
  • Throwables.getStackTraceAsString(Throwable):将异常的堆栈轨迹转换成字符串。
  • Throwables.propagate(Throwable):将异常重新抛出。

案例

案例一:使用Guava进行字符串拼接

Guava提供了一个方便的工具类Joiner,可以将多个字符串拼接成一个字符串。下面是一个使用案例:

import com.google.common.base.Joiner;public class StringJoiningExample {public static void main(String[] args) {String[] words = {"Hello", "Guava", "Joiner"};String joinedString = Joiner.on(", ").join(words);System.out.println(joinedString);}
}

运行以上代码,输出结果为:

Hello, Guava, Joiner

在这个案例中,我们使用了Joiner.on(", ")创建了一个拼接器,然后使用join方法将数组words中的字符串用逗号加空格拼接起来。

案例二:使用Guava进行集合过滤

Guava提供了一个工具类Collections2,可以对集合进行过滤操作。下面是一个使用案例:

import com.google.common.collect.Collections2;import java.util.Arrays;
import java.util.Collection;public class CollectionFilterExample {public static void main(String[] args) {Collection<String> words = Arrays.asList("apple", "banana", "cherry", "durian");Collection<String> filteredWords = Collections2.filter(words, word -> word.length() > 5);System.out.println(filteredWords);}
}

运行以上代码,输出结果为:

[banana, cherry]

在这个案例中,我们使用Collections2.filter方法对集合words进行过滤,只保留长度大于5的字符串。

案例三:使用Guava的缓存功能

Guava的缓存工具类CacheBuilder可以方便地实现缓存功能。下面是一个使用案例:

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;public class CacheExample {public static void main(String[] args) {Cache<String, String> cache = CacheBuilder.newBuilder().maximumSize(100).build();cache.put("key1", "value1");cache.put("key2", "value2");String value1 = cache.getIfPresent("key1");String value2 = cache.getIfPresent("key2");System.out.println(value1);System.out.println(value2);}
}

运行以上代码,输出结果为:

value1
value2

在这个案例中,我们使用CacheBuilder.newBuilder().maximumSize(100).build()创建了一个最大容量为100的缓存。然后使用put方法将键值对放入缓存,使用getIfPresent方法获取缓存中的值。

通过以上三个案例,我们可以看到Guava提供的一些常用功能在实际开发中的应用场景。这些功能可以大大简化开发过程,并提高代码的可读性和可维护性。

总结

本文介绍了Java开源工具库Guava的一些基本用法和常用功能。通过使用Guava,可以简化开发过程,提高开发效率。希望本文对您有所帮助,让您更好地使用Guava进行Java开发。

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

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

相关文章

Centos7.9下的celery无法直接使用-没有找到命令

问题 关于centos7.9下执行celery -A project worker -l debug -P eventlet 找不到celery命令 -bash: celery: command not found 解决办法 # /usr/local/Python3 为你的python路径 echo export PATH/usr/local/Python3/bin:$PATH >> /etc/profile.d/python3.sh source /…

在循环内错误使用函数定义(js的问题)

考虑下面代码&#xff1a; var elements document.getElementsByTagName(input); var n elements.length; // Assume we have 10 elements for this example for (var i 0; i < n; i) {elements[i].onclick function() {console.log("This is element #" …

利用WSL Linux编译OpenBMC

WSL2安装 &#xff08;1&#xff09; 旧版 WSL 的手动安装步骤 | Microsoft Learn &#xff08;2&#xff09; https://www.cnblogs.com/37yan/p/16169564.html &#xff08;3&#xff09; 在win10中安装linux--使用WSL_wsl.conf-CSDN博客 安装Ubuntu 18.04 on Windows 安…

联合体和枚举

联合体&#xff1a; 联合体是什么&#xff1f; 联合体也是一种自定义类型&#xff0c;这种类型定义的变量也包含一系列类型&#xff0c;特征是这些类型公用一块内存空间(所以叫联合体也叫公用体)可以理解为结构体公用一块内存。 //联合-联合体-共用体 //联合也是一种特殊的自…

TOMCAT9安装

1、官网下载 2、解压到任意盘符&#xff0c;注意路径不要有中文 3、环境变量 path 下 配置 %CATALINA_HOME%\bin 4、找到tomcat9/bin&#xff0c; 点击 start.bat启动 tomcat

目标检测、目标跟踪、重识别

文章目录 环境前言项目复现特征提取工程下载参考资料 环境 ubuntu 18.04 64位yolov5deepsortfastreid 前言 基于YOLOv5和DeepSort的目标跟踪 介绍过针对行人的检测与跟踪。本文介绍另一个项目&#xff0c;结合 FastReid 来实现行人的检测、跟踪和重识别。作者给出的2个主…

jsp 设备预约管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 设备预约管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…

SQL命令---添加新字段

介绍 使用sql语句为表添加新字段。 命令 alter table 表名 add 新字段名 数据类型;例子 向a表中添加name字段&#xff0c;类型为varchar(255)。 alter table a add name varchar(255);下面是执行添加有的表结构&#xff1a;

TimescaleDB-1 安装

前置条件&#xff1a; 1、操作系统ubuntu2204 2、已经通过apt的方式安装了pg14 当然其他的操作系统&#xff0c;官方文档中也有说明。 一、安装 https://docs.timescale.com/self-hosted/latest/install/installation-linux/ Installing self-hosted TimescaleDB on Debian-…

springboot+jdbcTemplate+sqlite编程示例——以沪深300成分股数据处理为例

引言 我们在自己做一些小的项目或者小的数据处理分析的时候&#xff0c;很多时候是不需要用到mysql这样的大型数据库&#xff0c;并且也不需要用到maven这样很重的框架的&#xff0c;取而代之可以使用jdbcTemplatesqlite这样的组合。 本文就介绍一下使用springbootjdbcTempla…

课堂练习3.4:进程的切换

3-9 课堂练习3.4:进程的切换 进程切换是支持多进程的一个关键环节,涉及到 CPU 现场的保存和恢复,本实训分析 Linux 0.11 的进程切换过程。 第1关第一次进程切换过程分析 任务描述 本关任务回答问题: 在第一次进程切换时: 1.是从几号进程切换到几号进程?0 号进程和 1 号…

Linux指令——scp:传输文件

Linux指令——scp&#xff1a;传输文件 简介&#xff1a; Linux文件互传指令 使用方法&#xff1a; scp [可选参数] file_source file_target # 可选参数一般为-r&#xff0c;递归传输 # 举例如下&#xff1a; scp /home/test/test.txt root192.168.1.200:/home/test/tes…

Java线程概念详解

线程 概念 1.程序:未解决某种问题,使用计算机语言编写的一些列指令(代码)的集合 2.进程:正在运行的程序(被加载到内存中),是操作系统进行资源分配的最小单位 3.线程:进程可以进一步细化为线程(比进程更小)且线程是隶属于进程的,是操作系统执行的最小的执行单元 也是cpu进行任…

CleanMyMac X2024免费许可证(激活教程)

CleanMyMac X是一款流行的系统优化工具&#xff0c;专为Mac用户设计。它可以帮助用户清理Mac系统中的垃圾文件、卸载不需要的程序、加速Mac性能以及保护Mac系统的安全。 一、简介 CleanMyMac X是一款功能强大的系统优化工具&#xff0c;它可以帮助用户清理Mac系统中的垃圾文件…

优麒麟ubuntukylin安装UE4.27.2

优麒麟ubuntukylin安装UE4.27.2 在&#xff08;国产&#xff09;优麒麟 ubuntukylin Linux平台上编译测试安装虚幻引擎。 优麒麟系统 这里选择的是官方增强版 https://www.ubuntukylin.com/downloads/ 同样的可以选择对应的Ubuntu22.04 LTS&#xff0c;唯一的区别就是优麒麟…

【精选】SpringMVC简介及其执行流程,参数获取方式

SpringMVC简介 MVC模型 MVC全称Model View Controller&#xff0c;是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分&#xff1a; Model&#xff08;模型&#xff09;&#xff1a;指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用中&…

采用NSD评估ADC性能

概要 评估采样器的传统性能指标SNR、SFDR和ENOB最早被用于二战时期,这些性能指标使用于具有通道选择性和低通采样使用的ADC,并不适用于近些年的射频直采ADC,因此需要引入更合适的噪声谱密度NSD(Noise Spectrum Density)指标来评估噪声性能。 传统技术指标的含义 无杂散…

async函数和await表达式

async函数 函数的返回值为promise对象 &#xff08;Promise介绍&#xff09;promise对象的结果由async函数执行的返回值决定&#xff0c;如果对象内返回非promise对象&#xff0c;比如字符串&#xff0c;那么返回结果是成功的promise对象&#xff0c;如果返回的是promise对象&…

Photoshop Circular Text

Ctrl N 新增 现学现卖

uniapp移动端悬浮按钮(吸附边缘)

Uniapp移动端悬浮按钮可以通过CSS实现吸附边缘的效果。具体实现步骤如下&#xff1a; html&#xff1a; <movable-area class"movable-area"><movable-view class"movable-view" :position"position" :x"x" :y"y"…