当前位置: 首页 > news >正文

guava工具类常用方法

Guava是Google开发的一个Java开源工具类库,它提供了许多实用的工具类和功能,可以简化Java编程中的常见任务。

引入依赖

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

Joiner

把集合或数组通过指定分隔符连接成字符串

        List<String> a = new ArrayList<>();a.add("a");a.add("b");a.add("c");Joiner joiner = Joiner.on(",");System.out.println(joiner.join(a));// a,b,ca.add(null);// 忽略nullJoiner joiner1 = Joiner.on(",").skipNulls();// a,b,cSystem.out.println(joiner1.join(a));Joiner joiner2 = Joiner.on(",").useForNull("替代");// a,b,c,替代System.out.println(joiner2.join(a));

Splitter

Splitter工具类将一个字符串按照逗号进行分割,并将分割后的结果存储在一个Iterable<String>对象中

        String str="a,b,c";Splitter splitter = Splitter.on(",");Iterable<String> iterable = splitter.split(str);System.out.println(iterable); // [a, b, c]str="a,b,,c";// omitEmptyStrings 过滤掉空白的字符串Splitter splitter1 = Splitter.on(",").omitEmptyStrings();Iterable<String> iterable1 = splitter1.split(str);System.out.println(iterable1); // [a, b, c]str="a,b, c ";// trimResults 去除前后空格Splitter splitter2 = Splitter.on(",").trimResults();Iterable<String> iterable2 = splitter2.split(str);System.out.println(iterable2); // [a, b, c]// 转为集合List<String> splitToList = splitter2.splitToList(str);System.out.println(splitToList);

下划线和驼峰互转

        String str="student_name";// 下划线转驼峰System.out.println(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, str)); //半驼峰 studentNameSystem.out.println(CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, str)); //全驼峰 Student_namestr="studentName";// 驼峰转下划线System.out.println(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, str)); // student_name

集合操作

快速生成集合

        ArrayList<String> stringArrayList = Lists.newArrayList("a", "b", "c");HashSet<String> stringHashSet = Sets.newHashSet("a", "b", "c");

集合分类

大集合分裂成多个集合

        ArrayList<String> stringArrayList = Lists.newArrayList("a", "b", "c");// 把stringArrayList分成小的集合,小的集合大小是2List<List<String>> partition = Lists.partition(stringArrayList, 2);System.out.println(partition); // [[a, b], [c]]

转集合

基本类型转集合

         System.out.println(Ints.asList(1, 2, 3)); // [1, 2, 3]System.out.println(Longs.asList(1l, 2, 3)); // [1, 2, 3]System.out.println(Floats.asList(12.3f, 3.2f, 2.2f)); // [12.3, 3.2, 2.2]

HashMultiset

 HashMultiset可以存储重复的元素,并且提供了方便的方法来统计每个元素的数量。它继承自AbstractMultiset类并实现了SerializableCloneable接口。

        HashMultiset<String> multiset = HashMultiset.create();multiset.add("a");multiset.add("b");multiset.add("c");multiset.add("a");System.out.println(multiset); // [a x 2, b, c]Set<Multiset.Entry<String>> entries = multiset.entrySet();System.out.println(entries); // [a x 2, b, c]for (Multiset.Entry<String> entry : entries) {System.out.println("元素:" + entry.getElement() + ",个数:" + entry.getCount());// 元素:a,个数:2// 元素:b,个数:1// 元素:c,个数:1}Set<String> elementSet = multiset.elementSet();System.out.println(elementSet); // [a, b, c]for (String element : elementSet) {System.out.println("元素:" + element);// 元素:a// 元素:b// 元素:c}

HashMultimap

HashMultimap允许一个键对应多个值。它继承自AbstractMultimap类并实现了SerializableCloneable接口。

        HashMultimap<String, String> multimap = HashMultimap.create();multimap.put("a","1");multimap.put("a","2");multimap.put("a","3");Collection<String> values = multimap.get("a");System.out.println(values); // [1, 2, 3]// 是否包含key=a,value=1的entrySystem.out.println(multimap.containsEntry("a", "1"));Map<String, Collection<String>> jkdMap = multimap.asMap(); // trueSystem.out.println(jkdMap); // {a=[1, 2, 3]}

ImmutableList

ImmutableList是Guava库中的一个集合类,它是一个不可变的(immutable)列表,即一旦创建就不能被修改。与标准Java的List接口不同,ImmutableList的内容在创建后就不能被改变。它实现了List接口,并提供了一组只读的操作方法来访问列表中的元素。

        ImmutableList<Object> immutableList = ImmutableList.builder().add("a").build();// 报错 java.lang.UnsupportedOperationException
//        immutableList.add("b");// 原生jdkList<String> list = new ArrayList<>();list.add("a");List<String> jdkUnmodifiableList = Collections.unmodifiableList(list);// jdk原生同样报错 java.lang.UnsupportedOperationException
//        jdkUnmodifiableList.add("c");// 但是可以对list操作list.add("c");System.out.println(jdkUnmodifiableList); // [a, c]

Preconditions

Preconditions是Guava库中的一个工具类,用于在代码中进行前置条件的检查。它提供了一组静态方法,可以验证参数、状态或其他条件是否满足,并在不满足条件时抛出相应的异常。使用Preconditions可以增强代码的可读性和健壮性,有效地进行参数校验和错误处理。

          String str=null;
//        Preconditions.checkNotNull(str,"参数不能为空"); // NullPointerException: 参数不能为空Preconditions.checkArgument(str != null ,"参数不能为空"); // IllegalArgumentException: 参数不能为空

相关文章:

guava工具类常用方法

Guava是Google开发的一个Java开源工具类库&#xff0c;它提供了许多实用的工具类和功能&#xff0c;可以简化Java编程中的常见任务。 引入依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>2…...

CSShas伪类选择器案例附注释

<!DOCTYPE html> <html lang="en"> <head><meta charset...

nodejs+vue中医体质的社区居民健康管理系统elementui

可以实现首页、中医体质量表、健康文章、健康视频、我的等&#xff0c;在我的页面可以对医生、小区单元、医疗药品等功能进行操作。目前主要的健康管理系统是以西医为主&#xff0c;而为了传扬中医文化&#xff0c;提高全民健康意识&#xff0c;解决人民日益增长的美好生活需要…...

Kotlin中reified 关键字

前言 在开始之前&#xff0c;让我们先讨论一下泛型。泛型用于为类、函数或接口提供通用的实现。下面是一个示例泛型方法&#xff1a; fun <T> displayValue(value: T) {println(value) }fun main() {displayValue<String>("Generics")displayValue<…...

Linux命令(95)之alias

linux命令之alias 1.alias介绍 linux命令alias是用来将/bin目录下的命令进行别名设置&#xff0c;将一些较长的命令进行简化。 alias命令的作用只局限于该次登入的操作&#xff0c;相当于临时变量。 如果对当前用户永久生效&#xff0c;需修改~/.bashrc文件&#xff0c;使用…...

DHCPsnooping 配置实验(2)

DHCP报文泛洪攻击 限制接收到报文的速率 vlan 视图或者接口视图 dhcp request/ dhcp-rate dhcp snooping check dhcp-request enable dhcp snooping alarm dhcp-request enable dhcp snooping alarm dhcp-request threshold 1 超过则丢弃报文 查看[Huawei]dis dhcp statistic…...

Qt 综合练习小项目--反金币(2/2)

目录 4 选择关卡场景 4.2 背景设置 4.3 创建返回按钮 4.3 返回按钮 4.4 创建选择关卡按钮 4.5 创建翻金币场景 5 翻金币场景 5.1 场景基本设置 5.2 背景设置 5.3 返回按钮 5.4 显示当前关卡 5.5 创建金币背景图片 5.6 创建金币类 5.6.1 创建金币类 MyCoin 5.6.…...

安装matplotlib__pygame,以pycharm调入模块

安装pip 安装matplotlib 安装完毕&#xff0c;终端输入pip list检查 导入模块出现bug&#xff0c;发现不是matplotlib包的问题&#xff0c;pycharm版本貌似不兼容&#xff0c;用python编辑器可正常绘图&#xff0c;pygame也可正常导入。 ​​​​​​​ pycharm版本问题解决 终…...

编写可扩展的软件:架构和设计原则

在今天的软件开发领域&#xff0c;可扩展性是一个至关重要的概念。无论您是开发一个小型应用程序还是一个大规模的软件系统&#xff0c;都需要考虑如何使您的软件能够在不断变化的需求下进行扩展和演进。本文将探讨编写可扩展软件的关键架构和设计原则&#xff0c;以帮助开发人…...

算法-排序算法

0、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a;通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#xff0c;因此也称为非线性时间比较类排序。 非比较类排序&#xff1a;不通过比较来决定元素间…...

Android_Monkey_测试执行策略及标准

一、Monkey命令概述 NO命令说明用法解释1 -p ALLOWED_PACKAGE用于指定某个apk&#xff0c;可以使用多个-p选项&#xff0c;但是每个-p命令选项只能用于一个apk 如果不指定-p&#xff0c;Monkey就会默认进行全系统测试。 -p com.android.contacts可以进行特定apk的Monkey测试2 …...

windows安装nginx

官网提供的下载地址&#xff1a;nginx: download nginx1.25.2下载地址&#xff1a;http://nginx.org/download/nginx-1.25.2.zip 直接运行nginx.exe会闪退&#xff0c;我们还得使用cmd/git bash/power shell 命令进行启动&#xff1b; 个人更喜欢git bash&#xff1b; 运行命…...

Java日期的学习篇

关于日期的学习 目录 关于日期的学习JDK8以前的APIDate Date常用APIDate的API应用 SimpleDateFormatSimpleDateFormat常用API测试 反向格式化(逆操作)测试 训练案例需求(秒杀活动)实现 Calendar需求痛点常见API应用测试 JDK8及以后的API(修改与新增)为啥学习(推荐使用)新增的AP…...

spark on hive

需要提前搭建好hive&#xff0c;并对hive进行配置。 1、将hive的配置文件添加到spark的目录下 cp $HIVE_HOME/conf/hive-site.xml $SPARK_HOME/conf2、开启hive的hivemetastore服务 提前创建好启动日志存放路径 mkdir $HIVE_HOME/logStart nohup /usr/local/lib/apache-hi…...

Linux Vi编辑器基础操作指南

Linux Vi编辑器基础操作指南 Linux中的Vi是一个强大的文本编辑器&#xff0c;虽然它有一些陡峭的学习曲线&#xff0c;但一旦掌握了基本操作&#xff0c;它就变得非常高效。以下是Vi编辑器的一些基本用法&#xff1a; 打开Vi编辑器&#xff1a; vi 文件名退出Vi编辑器&#xff…...

WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi

好 各位 经过我们上文 WEB3 solidity 带着大家编写测试代码 操作订单 创建/取消/填充操作 我们自己写了一个测试订单业务的脚本 没想到运行的还挺好的 那么 今天开始 我们就可以开始操作我们前端 Dapp 的一个操作了 在整个过程中 确实是没有我们后端的操作 或者说 我们自己就…...

rust运算

不同类型不能放在一起运算。如果非要计算&#xff0c;必须先强转成一个类型再运算。 一 、数字运算 &#xff08;一&#xff09;算术运算 a 10且b 5 名称运算符范例加ab的结果为15减-a-b的结果为5乘*a*b的结果为50除/a / b的结果为2求余%a % b的结果为0 Rust语言不支持自增…...

游戏引擎,脚本管理模块

编辑器中删除脚本&#xff0c;然后立即恢复删除的脚本关系正常编辑器中删除脚本&#xff0c;关掉编辑器&#xff0c;然后只恢复脚本&#xff0c;不恢复meta,然后再打开编辑器关系丢失编辑器中删除脚本&#xff0c;关掉编辑器&#xff0c;然后恢复脚本且恢复meta,然后再打开编辑…...

2023年7月工作经历三

年龄危机 传言&#xff1a;程序员干不过37岁&#xff0c;架构师干不过45岁&#xff0c;总监干不过55岁。我已经43岁了。当总监需要机遇&#xff1b;首下犯错&#xff0c;会扣领导工资&#xff1b;有的公司总监还需要出资。为了方便以后当总监&#xff0c;我还在超音速带过小团…...

1801_codesys产品主样本了解

全部学习汇总&#xff1a; GreyZhang/g_codesys: some codesys learning notes (github.com) 有些技术、学术的成长&#xff0c;氛围也是很重要的。我觉得工业控制&#xff0c;德国做得算是世界上很突出的。而这个巴伐利亚&#xff0c;更是突出中的佼佼者了。从这里的介绍看&am…...

CANN/ops-nn自适应层归一化算子

AdaLayerNorm 【免费下载链接】ops-nn 本项目是CANN提供的神经网络类计算算子库&#xff0c;实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-nn 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DTAtlas A3 训练系列产品/Atlas A3 推理系列产品√…...

AI编码助手安全护栏:Claude代码生成规则引擎实战指南

1. 项目概述&#xff1a;为AI编码助手装上“护栏”最近在折腾AI辅助编程&#xff0c;特别是用Claude这类大模型来写代码&#xff0c;效率提升确实明显。但用久了就会发现一个问题&#xff1a;模型生成的代码&#xff0c;有时候会“放飞自我”。比如&#xff0c;它可能会引入一些…...

AI原生转型生死线(2026奇点大会闭门报告首次公开)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生转型生死线&#xff08;2026奇点大会闭门报告首次公开&#xff09; 2026年奇点大会闭门报告显示&#xff1a;企业若未在2025年底前完成AI原生架构重构&#xff0c;其核心系统迭代效率将平均下降4…...

DNS 服务器学习笔记:核心总结与实验指南

DNS 服务器学习笔记&#xff1a;核心总结与实验指南 &#x1f4cc; 一、文章核心重点总结 1. DNS 基础知识 什么是 DNS&#xff1f; DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;是互联网的“电话簿”&#xff0c;负责将人类易记的域名&#xff08;如 w…...

联想拯救者15ISK加装NVMe SSD实战:从硬件兼容到系统部署的避坑指南

1. 联想拯救者15ISK加装NVMe SSD前的准备工作 我手上这台联想拯救者15ISK已经陪伴我征战了五年多&#xff0c;最近明显感觉到系统响应变慢&#xff0c;游戏加载时间变长。经过一番排查&#xff0c;发现瓶颈主要出在机械硬盘上。于是决定给它加装一块NVMe SSD&#xff0c;让老战…...

OpenClaw AI代理成本监控:离线日志解析与Token用量分析实战

1. 项目概述与核心价值如果你和我一样&#xff0c;在日常工作中重度依赖像 OpenClaw 这样的 AI 代理框架来处理各种自动化任务&#xff0c;那么一个绕不开的“甜蜜的烦恼”就是成本监控。我们享受着 AI 带来的效率提升&#xff0c;但每次看到账单时&#xff0c;心里总会咯噔一下…...

ARM GICv3中断控制器与ICC_BPR1寄存器详解

1. ARM GICv3中断控制器架构概述在ARM架构的现代处理器中&#xff0c;通用中断控制器(GIC)是管理硬件中断的核心组件。GICv3作为当前主流的版本&#xff0c;相比前代架构进行了多项重要改进&#xff1a;支持更多处理器核心&#xff08;理论上可达128个PE&#xff09;改进的中断…...

FPGA加速中性原子量子计算机的原子检测技术

1. 中性原子量子计算机的原子检测挑战量子计算领域近年来最激动人心的进展之一&#xff0c;就是中性原子量子计算机的快速发展。这种量子计算机利用激光镊子&#xff08;光学镊子&#xff09;阵列来捕获和排列中性原子&#xff08;如铷、铯等碱金属原子&#xff09;&#xff0c…...

3个核心功能深度解析:Recaf字节码搜索的技术实践

3个核心功能深度解析&#xff1a;Recaf字节码搜索的技术实践 【免费下载链接】Recaf The modern Java bytecode editor 项目地址: https://gitcode.com/gh_mirrors/re/Recaf Recaf是一款现代化的Java字节码编辑器&#xff0c;专为逆向工程和代码分析设计。作为一款功能强…...

kasetto:用SQL思维操作本地CSV/JSON文件的命令行利器

1. 项目概述&#xff1a;一个被低估的本地化数据管理利器如果你经常需要在本地处理一些结构化的数据&#xff0c;比如从网页上抓取的信息、日常记账的记录、项目进度的跟踪&#xff0c;或者只是想把一些零散的笔记整理成表格&#xff0c;你可能会面临一个选择&#xff1a;是用E…...