文章目录

  • 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);
  1. 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 、驼峰转下划线等小结相关推荐

  1. JSON字符串key值驼峰转下划线

    起因 工作中需要解析特殊的JSON字符串,将JSON文本中所有的Map结构中的key的格式由驼峰转换为下划线.本着不重复造轮子的原则,我在网上搜索到了一些资料,都是下划线转驼峰的工具,没有驼峰转下划线 ...

  2. 结合Hutool工具包,实现bean对象转map(支持驼峰转下划线)

    文章目录 前言 一.Hutool 二.代码 1.依赖包 2.BeanMapUtils.class 3.测试 MainTest.class BeanTest.class BeanTest2.class ...

  3. 阿昌教你使用谷歌guava工具包---集合包

    前言 今天阿昌这里分享一个谷歌guava工具包,自己在工作业务中洋哥推荐的一个集合工具包的partition()方法,看了看这个工具包的方法并不是很多,主要常用也就是以下正文的3个方法. 准备 走开始 ...

  4. 谷歌guava工具包详解

    概述 工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率.谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来.所以就诞生了guava. guava的优点: 高 ...

  5. spring boot 整合 谷歌guava的EventBus 实现单机版的消息发布订阅

    spring boot 整合 谷歌guava的EventBus 实现单机版的消息发布订阅 大型分布式系统,直接用mq解耦,那么单机系统怎么办,可以考虑用EventBus 用EventBus的好处也是异 ...

  6. 谷歌Guava LoadingCache介绍

      在工作中,加Cache是非常常见的一种性能优化手段,操作系统底层.计算机硬件层为了性能优化加了各种各样的Cache,当然大多数都是对应用层透明的.但如果你想在应用层加Cache的话,可能就需要你自 ...

  7. 谷歌Guava工具类的使用(1):BloomFilter的使用

    谷歌Guava工具类的使用(1):BloomFilter的使用 具体代码实现如下所示: // 创建布隆过滤器,设置存储的数据类型,预期数据量,误判率 (必须大于0,小于1) int insertion ...

  8. guava之guava cache

    一说到缓存,有没有脑海里立马想到的是guava cache.ehcache.redis.memerycache等等这些和缓存相关的技术实现,计算机专业出生可能还会想到cpu的一级缓存.二级缓存.三级缓 ...

  9. Guava 系列 - Guava基础

    文章目录 Guava 系列 - Guava基础 1.是什么 2.如何构建 3.用户文档 4.为什么选择使用guava Guava 系列 - Guava基础 1.是什么 guava 是一个开源的java ...

最新文章

  1. git 修改全局配置
  2. 解决Cesium无法加载出地球的问题
  3. 【转】NSMutableArray的正确使用
  4. 配置bitnami-redmine自带的Subversion
  5. JVM 性能调优监控工具 jps、jstack、jmap、jhat、jstat、hprof 使用详解
  6. access 战地1不加入ea_炒牛肉时,想要牛肉嫩滑又不老,只需加入1样东西,很多人都不懂...
  7. ajax communication failed,AJAX没有收到错误
  8. centos7中Python切换到Python3.x版本(解决常出现的错误)
  9. 数学方法论的含义和研究意义
  10. SI24R1兼容NRF24L01P DEMO板使用说明书
  11. 如何在linux运行windows程序,如何Linux系统上运行Windows应用程序(3)
  12. java 正则 竖线_Java 中正则表达式如何匹配竖线(|) , 以及在 Kotlin 中是如何改进的?...
  13. 电路课组(一)电路原理 Review 1 线性电路分析基础
  14. FL Studio第 24 个年头:Image-Line 升级 FL Studio 21 音乐工作站
  15. echarts添加背景图
  16. VF01开票BAPI
  17. ELK集群部署(六)之Kafka操作
  18. C10K 问题引发的技术变革
  19. 二.网络布线与进制转换——详解
  20. 英文论文写作摘要的时态和语态

热门文章

  1. 用飞秋给朋友发送消息失败的原因分析及解决办法
  2. S2750S5700S6700 V200R003(C00C02C10) MIB参考
  3. 2018中国网络安全大会6月在京召开
  4. 面试让人画正十七边形?面试官你长点心好不好?
  5. STM32使用CJSON获取心知天气
  6. 【难得偷闲win7主题】_7.26
  7. web前端期末大作业:基于html化妆品购物商城项目的设计与实现——化妆品官方网站设计与实现(HTML+CSS+JS)
  8. C语言中常见数据类型和对应内存空间大小
  9. [附源码]计算机毕业设计打印助手平台
  10. PS矩形选框工具怎么抠图并复制