【guava】 谷歌guava工具包的常用方法 双key的map 、驼峰转下划线等小结
文章目录
- 1. maven引入 (某些框架会引入guava 注意版本冲突问题)
- 2. guava 对集合的处理
- 3. guava的 双键table (双key map)
- 4. guava的文件读写 代码非常简洁
- 6. guava还提供了map 求差异结果等方法
- 7. guava的base64处理
- 8. 驼峰下划线互转
1. maven引入 (某些框架会引入guava 注意版本冲突问题)
<!-- guava工具包--><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version></dependency>
2. guava 对集合的处理
// 如不清楚jdk自带的Arrays.asList() 和list.add有什么区别 建议别用Arrays.asList()// 谷歌的Lists.newArrayList 和list add基本是等效的 额外判断了初始大小 提高了效率ArrayList<String> list = Lists.newArrayList("1", "2", null, "", "3");// 只会跳过null 不会跳过空串String join = Joiner.on("_").skipNulls().join(list);System.out.println(join);// 给null设置默认值String str = Joiner.on("|").useForNull("给null赋予的默认值").join(list);System.out.println(str);String splitStr = "aa|bb|cc|dd|ee||ff";// 这里则是跳过分割符之间的空串了 (ee|和|ff之间那个空串) 因为已经在String里面了 是不可能存在null的List<String> strings = Splitter.on("|").omitEmptyStrings().splitToList(splitStr);// 转成Stream流 配合stream流的各种操作 非常好用! omitEmptyStrings 跳过空值Stream<String> stringStream = Splitter.on("|").omitEmptyStrings().splitToStream(splitStr);String space = "aa| |bb|cc";// 去除空格 注意空格去除后就是空串了 如果需要去除空串 链式结合omitEmptyStringsList<String> trims = Splitter.on("|").trimResults().splitToList(space);
3. guava的 双键table (双key map)
即使暂时用不上 也可以牢记有这么个容器,相当于map有两个key,迟早能用上的。
这里简单举两个我在工作中遇到的场景:a. 需求分别是统计24h/7d/30d 的风速,24h/7d/30d的 温度 , 24h/7d/30d 的水速 等等...
特点就是 需求高度类似,这样我们就可以对外只提供一个接口。
可以定义一个item枚举类,用来存放风速、温度、水速等统计项,
还需要定义一个period枚举类 用来存放24h 、7d、30d等统计周期,
我们可以根据item和period 去获取一个唯一的key, 通过这个key,去获取需要的业务数据。b. 需求是统计鱼体重为 1-100g ,101-200g ....的占比, 我们知道 开发中是不会使用魔法值的,
那这个1、100、101、200怎么定义呢?难道有多少个数字就定义多少个常量吗?
这个时候我们也可以使用上table, rowKey我们自己去定义,两个范围就可以分别存放在Col和Value里面
// row col valueTable<String, String, List<Object>> tables = HashBasedTable.create();tables.put("阿里", "java", Lists.newArrayList(1));tables.put("腾讯", "java", Lists.newArrayList(2));tables.put("腾讯", "python", Lists.newArrayList(3));List<Object> tableResult = tables.get("腾讯", "java");for (Object o : tableResult) {System.out.println("table-----"+o);}
4. guava的文件读写 代码非常简洁
File input = new File("C:\\Windows\\System32\\drivers\\etc\\hosts");// 会自动关闭流List<String> files = Files.readLines(input, Charsets.UTF_8);//由于是按行读取,所以这里只有加上"\n"才能保证这个字符串和文本内容完全一致String text = Joiner.on("\n").join(files);System.out.println(text);File output = new File("F:\\logs\\b.txt");Files.write(text.getBytes(), output);
- guava的 本地缓存
LoadingCache<String, Object> cache = CacheBuilder.newBuilder()// 指定并发级别.concurrencyLevel(8)// 初始化大小 配合并发级别做分段锁.initialCapacity(60)//设置缓存大小.maximumSize(1000)//同步刷新 刷新过程中会阻塞 值到新的值出来.expireAfterWrite(1, TimeUnit.SECONDS)//异步刷新 如果是在刷新过程中 会取到旧值 需要重写reload方法
// .refreshAfterWrite(2, TimeUnit.SECONDS)//开启缓存的统计功能.recordStats()//移除时的监听任务//.removalListener()//构建缓存.build(new CacheLoader<String, Object>() {//此处实现如果根据key找不到value需要去如何获取@Overridepublic Object load(String s) throws Exception {return "load值";}//如果批量加载有比反复调用load更优的方法则重写这个方法@Overridepublic Map<String, Object> loadAll(Iterable<? extends String> keys) throws Exception {return super.loadAll(keys);}});cache.put("1", "1");try {while (true) {Object o = cache.get("1");Thread.sleep(1000);System.out.println(o);}} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}
6. guava还提供了map 求差异结果等方法
但是仅针对简单格式的map , 复杂情况下 例如map<String,List < Entity> >,它并不会把list中具体项给返回 所以就不细讲了
7. guava的base64处理
随着jdk版本的升级 变更 ,用jdk自带的base64很可能在升级后就找不到包路径了, 干脆使用guava的工具类 以逸待劳```String url = "test";String encode= BaseEncoding.base64().encode(url.getBytes());String decode = new String(BaseEncoding.base64().decode(encode));```
8. 驼峰下划线互转
String column = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, "testFish");// colunm : test_fishString field = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "meng_qiu") // field : mengQiu
【guava】 谷歌guava工具包的常用方法 双key的map 、驼峰转下划线等小结相关推荐
- JSON字符串key值驼峰转下划线
起因 工作中需要解析特殊的JSON字符串,将JSON文本中所有的Map结构中的key的格式由驼峰转换为下划线.本着不重复造轮子的原则,我在网上搜索到了一些资料,都是下划线转驼峰的工具,没有驼峰转下划线 ...
- 结合Hutool工具包,实现bean对象转map(支持驼峰转下划线)
文章目录 前言 一.Hutool 二.代码 1.依赖包 2.BeanMapUtils.class 3.测试 MainTest.class BeanTest.class BeanTest2.class ...
- 阿昌教你使用谷歌guava工具包---集合包
前言 今天阿昌这里分享一个谷歌guava工具包,自己在工作业务中洋哥推荐的一个集合工具包的partition()方法,看了看这个工具包的方法并不是很多,主要常用也就是以下正文的3个方法. 准备 走开始 ...
- 谷歌guava工具包详解
概述 工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率.谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来.所以就诞生了guava. guava的优点: 高 ...
- spring boot 整合 谷歌guava的EventBus 实现单机版的消息发布订阅
spring boot 整合 谷歌guava的EventBus 实现单机版的消息发布订阅 大型分布式系统,直接用mq解耦,那么单机系统怎么办,可以考虑用EventBus 用EventBus的好处也是异 ...
- 谷歌Guava LoadingCache介绍
在工作中,加Cache是非常常见的一种性能优化手段,操作系统底层.计算机硬件层为了性能优化加了各种各样的Cache,当然大多数都是对应用层透明的.但如果你想在应用层加Cache的话,可能就需要你自 ...
- 谷歌Guava工具类的使用(1):BloomFilter的使用
谷歌Guava工具类的使用(1):BloomFilter的使用 具体代码实现如下所示: // 创建布隆过滤器,设置存储的数据类型,预期数据量,误判率 (必须大于0,小于1) int insertion ...
- guava之guava cache
一说到缓存,有没有脑海里立马想到的是guava cache.ehcache.redis.memerycache等等这些和缓存相关的技术实现,计算机专业出生可能还会想到cpu的一级缓存.二级缓存.三级缓 ...
- Guava 系列 - Guava基础
文章目录 Guava 系列 - Guava基础 1.是什么 2.如何构建 3.用户文档 4.为什么选择使用guava Guava 系列 - Guava基础 1.是什么 guava 是一个开源的java ...
最新文章
- git 修改全局配置
- 解决Cesium无法加载出地球的问题
- 【转】NSMutableArray的正确使用
- 配置bitnami-redmine自带的Subversion
- JVM 性能调优监控工具 jps、jstack、jmap、jhat、jstat、hprof 使用详解
- access 战地1不加入ea_炒牛肉时,想要牛肉嫩滑又不老,只需加入1样东西,很多人都不懂...
- ajax communication failed,AJAX没有收到错误
- centos7中Python切换到Python3.x版本(解决常出现的错误)
- 数学方法论的含义和研究意义
- SI24R1兼容NRF24L01P DEMO板使用说明书
- 如何在linux运行windows程序,如何Linux系统上运行Windows应用程序(3)
- java 正则 竖线_Java 中正则表达式如何匹配竖线(|) , 以及在 Kotlin 中是如何改进的?...
- 电路课组(一)电路原理 Review 1 线性电路分析基础
- FL Studio第 24 个年头:Image-Line 升级 FL Studio 21 音乐工作站
- echarts添加背景图
- VF01开票BAPI
- ELK集群部署(六)之Kafka操作
- C10K 问题引发的技术变革
- 二.网络布线与进制转换——详解
- 英文论文写作摘要的时态和语态
热门文章
- 用飞秋给朋友发送消息失败的原因分析及解决办法
- S2750S5700S6700 V200R003(C00C02C10) MIB参考
- 2018中国网络安全大会6月在京召开
- 面试让人画正十七边形?面试官你长点心好不好?
- STM32使用CJSON获取心知天气
- 【难得偷闲win7主题】_7.26
- web前端期末大作业:基于html化妆品购物商城项目的设计与实现——化妆品官方网站设计与实现(HTML+CSS+JS)
- C语言中常见数据类型和对应内存空间大小
- [附源码]计算机毕业设计打印助手平台
- PS矩形选框工具怎么抠图并复制