Guava工具总结

news/2024/10/5 23:29:29

Table双键Map

public class OTest {public static void main(String[] args) {Map<String, Map<String, Integer>> map = new HashMap<>();//存放元素Map<String, Integer> workMap = new HashMap<>();workMap.put("Jan", 20);workMap.put("Feb", 28);map.put("Hydra", workMap);Map<String, Integer> workMap2 = new HashMap<>();workMap2.put("Jan", 18);workMap2.put("Feb", 16);map.put("Trunks", workMap2);//取出元素Integer dayCount = map.get("Hydra").get("Jan");System.out.println(dayCount);// 1、定义 一个表格Table<String, String, Integer> table = HashBasedTable.create();//存放元素table.put("Hydra", "Jan", 20);table.put("Hydra", "Feb", 28);table.put("Trunks", "Jan", 28);table.put("Trunks", "Feb", 16);// 1、取出元素Integer dayCount2 = table.get("Hydra", "Jan");System.out.println(dayCount2);// 2、rowKey或columnKey的集合Set<String> rowKeys = table.rowKeySet();System.out.println(rowKeys);Set<String> columnKeys = table.columnKeySet();System.out.println(columnKeys);// 3、value集合Collection<Integer> values = table.values();System.out.println(values);// 4、转为嵌套的MapMap<String, Map<String, Integer>> map2 = table.rowMap();System.out.println(map2);Map<String, Map<String, Integer>> map3 = table.columnMap();System.out.println(map3);}
}

BiMap双向Map

public class OTest2 {public static void main(String[] args) {BiMap<String, String> biMap = HashBiMap.create();biMap.put("Hydra", "Programmer");biMap.put("Tony", "IronMan");biMap.put("Thanos", "Titan");//使用key获取valueSystem.out.println(biMap.get("Tony"));BiMap<String, String> inverse = biMap.inverse();//使用value获取keySystem.out.println(inverse.get("Titan"));// 1、反转后操作的影响上面我们用inverse方法反转了原来BiMap的键值映射,但是这个反转后的BiMap并不是一个新的对象,//    它实现了一种视图的关联,所以对反转后的BiMap执行的所有操作会作用于原先的BiMap上。HashBiMap<String, String> biMap1 = HashBiMap.create();biMap1.put("Hydra", "Programmer");biMap1.put("Tony", "IronMan");biMap1.put("Thanos", "Titan");BiMap<String, String> inverse1 = biMap1.inverse();inverse1.put("IronMan", "Stark");System.out.println(biMap1);// 2、value不可重复// BiMap的底层继承了Map,我们知道在Map中key是不允许重复的,而双向的BiMap中key和value可以认为处于等价地位,因此在这个基础上加了限制,value也是不允许重复的。看一下下面的代码:// 这样代码无法正常结束,会抛出一个IllegalArgumentException异常:try {HashBiMap<String,String> biMap2 = HashBiMap.create();biMap2.put("Tony","IronMan");biMap2.put("Stark","IronMan");} catch (Exception e) {if (e instanceof IllegalArgumentException) {System.out.println("IllegalArgumentException异常");}}// 3、获取value为set集合Set<String> values = biMap.values();System.out.println(values);}
}

Multimap - 多值Map

public class OTest3 {public static void main(String[] args) {Multimap<String, Integer> multimap = ArrayListMultimap.create();multimap.put("day", 1);multimap.put("day", 2);multimap.put("day", 8);multimap.put("month", 3);System.out.println(multimap);// 1、获取值的集合Collection<Integer> day = multimap.get("day");// 如果在创建时指定为ArrayListMultimap类型,那么get方法将返回一个ListArrayListMultimap<String, Integer> multimap2 = ArrayListMultimap.create();List<Integer> day2 = multimap2.get("day");System.out.println(day2);// 同理,你还可以创建HashMultimap、TreeMultimap等类型的Multimap。// Multimap的get方法会返回一个非null的集合,但是这个集合的内容可能是空,看一下下面的例子System.out.println(multimap.get("day"));System.out.println(multimap.get("year"));// 2、操作get后的集合// 和BiMap的使用类似,使用get方法返回的集合也不是一个独立的对象,可以理解为集合视图的关联,对这个新集合的操作仍然会作用于原始的Multimap上,看一下下面的例子:ArrayListMultimap<String, Integer> multimap3 = ArrayListMultimap.create();multimap3.put("day", 1);multimap3.put("day", 2);multimap3.put("day", 8);multimap3.put("month", 3);List<Integer> day3 = multimap3.get("day");List<Integer> month3 = multimap3.get("month");//这个0是下标day3.remove(0);month3.add(12);System.out.println(multimap);// 3、转换为Map// 使用asMap方法,可以将Multimap转换为Map<K,Collection>的形式,同样这个Map也可以看做一个关联的视图,在这个Map上的操作会作用于原始的Multimap。Map<String, Collection<Integer>> map = multimap.asMap();for (String key : map.keySet()) {System.out.println(key + ":" + map.get(key));}map.get("day").add(20);System.out.println(multimap);}
}

RangeMap范围Map

public class OTest4 {public static void main(String[] args) {// 先看一个例子,假设我们要根据分数对考试成绩进行分类,那么代码中就会出现这样丑陋的if-elseSystem.out.println(getRank(80));// 而guava中的RangeMap描述了一种从区间到特定值的映射关系,让我们能够以更为优雅的方法来书写代码。下面用RangeMap改造上面的代码并进行测试:RangeMap<Integer, String> rangeMap = TreeRangeMap.create();rangeMap.put(Range.closedOpen(0, 60), "fail");rangeMap.put(Range.closed(60, 90), "satisfactory");rangeMap.put(Range.openClosed(90, 100), "excellent");System.out.println(rangeMap.get(59));System.out.println(rangeMap.get(60));System.out.println(rangeMap.get(90));System.out.println(rangeMap.get(91));rangeMap.remove(Range.closed(70,80));System.out.println(rangeMap.get(75));}public static String getRank(int score) {if (0 <= score && score < 60) {return "fail";} else if (60 <= score && score <= 90) {return "satisfactory";} else if (90 < score && score <= 100) {return "excellent";}return null;}
}

ClassToInstanceMap实例Map

public class OTest5 {public static void main(String[] args) {ClassToInstanceMap<Object> instanceMap = MutableClassToInstanceMap.create();SysUser user = new SysUser();SysDept dept = new SysDept();instanceMap.putInstance(SysUser.class, user);instanceMap.putInstance(SysDept.class, dept);// 使用ClassToInstanceMap这种方式有什么好处呢?// 首先,这里最明显的就是在取出对象时省去了复杂的强制类型转换,避免了手动进行类型转换的错误。// 其次,我们可以看一下ClassToInstanceMap接口的定义,它是带有泛型的:// public interface ClassToInstanceMap<B> extends Map<Class<? extends B>,B>{...}ClassToInstanceMap<Map> instanceMap2 = MutableClassToInstanceMap.create();HashMap<String, Object> hashMap = new HashMap<>();TreeMap<String, Object> treeMap = new TreeMap<>();ArrayList<Object> list = new ArrayList<>();instanceMap.putInstance(HashMap.class, hashMap);instanceMap.putInstance(TreeMap.class, treeMap);System.out.println(instanceMap2);// 这样是可以正常执行的,因为HashMap和TreeMap都集成了Map父类,但是如果想放入其他类型,就会编译报错:// instanceMap2.putInstance(ArrayList.class, list);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

B 端产品未来几年的发展趋势XG

在当今数字化高速发展的时代,B 端产品经理作为企业数字化转型的关键推动者,肩负着重大的责任。不仅要深入了解企业的业务需求,还要紧跟技术发展的步伐,为企业提供高效、创新的解决方案。那么,未来几年,B 端产品领域将会呈现出哪些发展趋势呢?一、人工智能与机器学习的深…

Clobotics 计算机视觉场景存储实践:多云架构、 POSIX 全兼容、低运维的统一存储HB

Clobotics 是一家将计算机视觉和机器学习技术应用于风电以及零售行业的企业。在风电行业,Clobotics 利用无人机对风力发电机叶片进行检查,显著降低了对人工作业的依赖。在零售领域,公司通过分析捕获的包装商品图像来提供基于实时数据的洞察,以增加销售额并减少运营成本。 存…

uni-app之camera组件-人脸拍摄i6

小程序录制视频;10-30秒;需要拍摄人脸,大声朗读数字(123456)这种。 1.camera组件 camera页面内嵌的区域相机组件。注意这不是点击后全屏打开的相机 camera只支持小程序使用;官网链接1.2 效果图1.3 页面布局 camera 设置宽100%,高度通过uni.getSystemInfo获取,全屏展示。…

怎样打开windows自动更新,打开电脑更新的步骤及方法

清理C盘是维护电脑性能的重要步骤,但需要注意方法以避免对电脑造成不良影响。以下是一份详细的C盘清理教程及方法,旨在帮助您安全有效地释放C盘空间: 一、备份重要数据 步骤:在开始清理前,请确保您已备份C盘上的重要个人文件和系统设置,以防误删或意外情况导致数据丢失。…

GPU虚拟化技术简介:实现高性能图形处理的灵活部署

GPU虚拟化技术是一项重要的创新,通过将物理GPU划分为多个虚拟GPU,实现多用户共享和独立运行图形处理任务的能力。本文介绍了GPU虚拟化技术的基本原理、应用场景和优势。该技术在云计算、虚拟桌面基础设施和科学研究等领域具有广泛应用。GPU虚拟化技术提高了资源利用率、性能和…

二. Spring Boot 中的 “依赖管理和自动配置” 详解透彻到底(附+详细代码流程)sh

二. Spring Boot 中的 “依赖管理和自动配置” 详解透彻到底(附+详细代码流程) @ 目录* 二. Spring Boot 中的 “依赖管理和自动配置” 详解透彻到底(附+详细代码流程)1. 如何理解 “ 约定优于配置 ” 2. Spring Boot 依赖管理 和 自动配置2.1 Spring Boot 的依赖管理2.1.1…

从代码到产品,我的IT职业成长之路yW

每个人的职业生涯都是一段充满转折和挑战的旅程,当然每一次职业转型都是一次重新定义自己的机会,从2015年开始,当时我刚踏入IT行业,成为一名Java开发者,后来随着时间的推移,我的职业方向逐渐转向了前端开发者,埋头于代码的世界。最终在2018年找到了属于自己的职业定位—…

如何通过composer下载拓展

1.安装composer 2.前往packagist查找插件,地址:https://packagist.org/3.通过搜索找到合适插件 4.复制composer指令进行安装插件