当前位置: 首页 > 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…...

flink的计时器

背景 在flink中&#xff0c;我们经常使用ontimer计时器实现很多逻辑的功能&#xff0c;常见的比如某个传感器温度增加连续超过1分钟的告警输出等&#xff0c;本文就来简单记录下计时器的作用 计时器 ontimer的定义 public void onTimer(long timestamp, OnTimerContext ctx…...

@SpringBootApplication剖析

一、前言 在SpringBoot项目中启动类必须加一个注解SpringBootApplication&#xff0c;今天我们来剖析SpringBootApplication这个注解到底做了些什么。 二、SpringBootApplication简单分析 进入SpringBootApplication源代码如下&#xff1a; 可以看出SpringBootApplication是…...

浅谈wor2vec,RNN,LSTM,Transfermer之间的关系

浅谈wor2vec&#xff0c;RNN&#xff0c;LSTM&#xff0c;Transfermer之间的关系 今天博主谈一谈wor2vec&#xff0c;RNN&#xff0c;LSTM&#xff0c;Transfermer这些方法之间的关系。 首先&#xff0c;我先做一个定位&#xff0c;其实Transfermer是RNN&#xff0c;LSTM&…...

【11】c++设计模式——>单例模式

单例模式是什么 在一个项目中&#xff0c;全局范围内&#xff0c;某个类的实例有且仅有一个&#xff08;只能new一次&#xff09;&#xff0c;通过这个唯一的实例向其他模块提供数据的全局访问&#xff0c;这种模式就叫单例模式。单例模式的典型应用就是任务队列。 为什么要使…...

深度学习-卷积神经网络-AlexNET

文章目录 前言1.不同卷积神经网络模型的精度2.不同神经网络概述3.卷积神经网络-单通道4.卷积神经网络-多通道5.池化层6.全连接层7.网络架构8.Relu激活函数9.双GPU10.单GPU模型 1.LeNet-52.AlexNet1.架构2.局部响应归一化&#xff08;VGG中取消了&#xff09;3.重叠/不重叠池化4…...

人机关系不是物理关系也不是数理关系

人机关系是一种复杂的社会技术系统&#xff0c;涉及到人类和机器、环境之间的相互作用和影响。它不仅限于物理接触和数理规律&#xff0c;同时还包括了思维、情感、意愿等方面的交流和互动。在人机关系中&#xff0c;人类作为使用者和机器作为工具&#xff08;将来可能会上升到…...

<html dir=ltr>是什么意思?

<html dirltr>的意思是&#xff1a; 文字默认从左到右排列 说明&#xff1a; HTML--超级文本标记语言 dir 属性 -- (文字的)排列方式属性 取值&#xff1a; ltr -- 代表左到右的排列方式 rtl -- 代表右到左的排列方式 默认值:ltr 示例&#xff1a; ltr左到右的对…...

工厂模式:简化对象创建的设计思想 (设计模式 四)

引言 在软件开发中&#xff0c;我们经常需要创建各种对象实例来满足不同的需求。通常情况下&#xff0c;我们会使用new关键字直接实例化对象&#xff0c;但这种方法存在一些问题&#xff0c;比如对象的创建逻辑分散在代码中&#xff0c;难以维护和扩展&#xff0c;同时也违反了…...

【2023最新】微信小程序中微信授权登录功能和退出登录功能实现讲解

文章目录 一、讲解视频二、小程序前端代码三、后端Java代码四、备注 一、讲解视频 教学视频地址&#xff1a; 视频地址 二、小程序前端代码 // pages/profile/profile.js import api from "../../utils/api"; import { myRequest } from "../../utils/reques…...

复习 --- C++运算符重载

.5 运算符重载 运算符重载概念&#xff1a;对已有的运算符重新进行定义&#xff0c;赋予其另外一种功能&#xff0c;以适应不同的数据类型 4.5.1 加号运算符重载 作用&#xff1a;实现两个自定义数据类型相加的运算 1 #include<iostream>2 using namespace std;3 /…...

上海seo/网站优化检测

FLAG 或是 FANG 仍然是大多数求职者的首选&#xff0c;毕竟薪资待遇、福利都是非常诱人的。而其实很多小公司或者startups并不比大公司差。在start-up你有很多机会去 take ownership&#xff0c;挑战技术&#xff0c;独挡一面&#xff0c;升职加薪也快&#xff0c;1-2年后&…...

独立的网站和网页/做企业网站建设的公司

求两个数组的交集 var arr1 [1,2,3]; var arr2 [2,3,4]; var arr3; arr3 arr1.filter(function(num) {return arr2.indexOf(num) ! -1; }); console.log(arr3); //输出[2, 3] 转载于:https://www.cnblogs.com/liyuchuan/p/10952927.html...

花钱做网站不给源代码/营销策划方案范文1500

一.考虑使用Tcpdump&#xff0c;将抓到的包保存到cap文件中&#xff0c;然后手动分析。参考资料&#xff1a;1. http://www.cnblogs.com/tt-0411/archive/2012/09/23/2699360.html2. http://www.360doc.com/content/11/1117/17/8151417_165252820.shtml3. http://blog.csdn.net…...

三亚同城招聘网站/石家庄seo优化

大年初一&#xff0c;楼主在这里给大家拜年&#xff0c;祝大家码上升职加薪&#xff0c;码上有对象结婚&#xff0c;码上有车有房&#xff0c;幸福安康。 过完年&#xff0c;回学校注册报道之后&#xff0c;大概就要回深圳到公司开始实习了。提高自己&#xff0c;无非就有两种方…...

怎么做刷赞网站/微信朋友圈广告投放收费标准

第十一章 Intent原理与使用 ---显式Intent 使用步骤: FirstActivity: 1.声明一个显式Intent Intent intent new Intent();//无参构造器 intent.setClass(MainActivity.this, SecondActivity.class);//intent.setClass()方法传入参数 或者 Intent intent new Intent(MainActiv…...

分析网站的外链/东莞seo顾问

今天看到《删除分区如何不让全局索引失效&#xff1f;》这篇文章有朋友提了个问题&#xff0c;truncate是删除数据操作&#xff0c;但他是DDL语句&#xff0c;不是delete这种DML语句&#xff0c;不会写redo和undo&#xff0c;不能rollback。官方文档&#xff0c;已经明确指出&a…...