RangeMap<Integer String> rangeMap = TreeRangeMap.create();
rangeMap.put(Range.closedOpen(060)\"fail\");
rangeMap.put(Range.closed(6090)\"satisfactory\");
rangeMap.put(Range.openClosed(90100)\"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));
在上面的代码中 , 先后创建了[060)的左闭右开区间、[6090
的闭区间、(90100
的左开右闭区间 , 并分别映射到某个值上 。 运行结果打印:
failsatisfactory
satisfactory
excellent
当然我们也可以移除一段空间 , 下面的代码移除了[7080
这一闭区间后 , 再次执行get时返回结果为null:
rangeMap.remove(Range.closed(7080));System.out.println(rangeMap.get(75));
ClassToInstanceMap - 实例MapClassToInstanceMap是一个比较特殊的Map , 它的键是Class , 而值是这个Class对应的实例对象 。 先看一个简单使用的例子 , 使用putInstance方法存入对象:
ClassToInstanceMap<Object> instanceMap = MutableClassToInstanceMap.create();
User user=new User(\"Hydra\"18);
Dept dept=new Dept(\"develop\"200);
instanceMap.putInstance(User.classuser);instanceMap.putInstance(Dept.classdept);
使用getInstance方法取出对象:
User user1 = instanceMap.getInstance(User.class);System.out.println(user==user1);
运行结果打印了true , 说明了取出的确实是我们之前创建并放入的那个对象 。
【Java|Guava中这些Map的优秀操作,让我的代码量减少了50%】大家可能会疑问 , 如果只是存对象的话 , 像下面这样用普通的Map也可以实现:
Map<ClassObject> map=new HashMap<>();
User user=new User(\"Hydra\"18);
Dept dept=new Dept(\"develop\"200);
map.put(User.classuser);map.put(Dept.classdept);
那么 , 使用ClassToInstanceMap这种方式有什么好处呢?
首先 , 这里最明显的就是在取出对象时省去了复杂的强制类型转换 , 避免了手动进行类型转换的错误 。 其次 , 我们可以看一下ClassToInstanceMap接口的定义 , 它是带有泛型的:
public interface ClassToInstanceMap<B> extends Map<Class<? extends B> B>{...
这个泛型同样可以起到对类型进行约束的作用 , value要符合key所对应的类型 , 再看看下面的例子:
ClassToInstanceMap<Map> instanceMap = MutableClassToInstanceMap.create();
HashMap<String Object> hashMap = new HashMap<>();
TreeMap<String Object> treeMap = new TreeMap<>();
ArrayList<Object> list = new ArrayList<>();
instanceMap.putInstance(HashMap.classhashMap);
instanceMap.putInstance(TreeMap.classtreeMap);
这样是可以正常执行的 , 因为HashMap和TreeMap都集成了Map父类 , 但是如果想放入其他类型 , 就会编译报错:
所以 , 如果你想缓存对象 , 又不想做复杂的类型校验 , 那么使用方便的ClassToInstanceMap就可以了 。
总结本文介绍了guava中5种对Map的扩展数据结构 , 它们提供了非常实用的功能 , 能很大程度的简化我们的代码 。 但是同时使用中也有不少需要避开的坑 , 例如修改关联的视图会对原始数据造成影响等等 , 具体的使用中大家还需要谨慎一些 。
- 滴滴出行|裁员真能拯救中国互联网?
- 北斗|中国航天进入发展快车道
- 领军企业|30个!中国科协发布2022年科技领域重大问题难题
- 有人觉得中暑就是热出来的,吃一些退烧药就好了,这种做法 蚂蚁庄园今日答案6月28日
- 在昨日推文中,王者荣耀将以“____文化”为主题推出限定皮肤,为乡村振兴加油? 王者荣耀6月28日每日一题答案
- 零售业|确定涨价!iPhone14四款新机全面涨价!国行也在其中!
- 华为|意识到离不开中国了?外媒称华为、中兴或将重新打入美国市场
- 恒大|中国恒大回应被清盘呈请:极力反对 预期不影响重组计划
- 月球也在太阳系的宜居带中,为何不能产生生命?原来个头太小了
- 太空中的真菌毒素是否危害宇航员健康?科学家:尚不明确
