guava中ImmutableMap使用示例及好处
ImmutableMap是不可变的,线程安全的;它可以创建一些常量的映射键值对;他提供了很多的组合键值对的方法,源码中使用了一个静态内部类来组装构建ImmutableMap,静态内部类作为外部类的辅助构建ImmutableMap,内部使用final声明了一个ArrayList变量。
public static class Builder<K, V>{final ArrayList<Map.Entry<K, V>> entries = Lists.newArrayList();public Builder() {}public Builder<K, V> put(K key, V value){this.entries.add(ImmutableMap.entryOf(key, value));return this;}public Builder<K, V> put(Map.Entry<? extends K, ? extends V> entry){K key = entry.getKey();V value = entry.getValue();if ((entry instanceof ImmutableEntry)) {Preconditions.checkNotNull(key);Preconditions.checkNotNull(value);Map.Entry<K, V> immutableEntry = entry;this.entries.add(immutableEntry);}else{this.entries.add(ImmutableMap.entryOf(key, value));}return this;}public Builder<K, V> putAll(Map<? extends K, ? extends V> map){this.entries.ensureCapacity(this.entries.size() + map.size());for (Map.Entry<? extends K, ? extends V> entry : map.entrySet()) {put(entry.getKey(), entry.getValue());}return this;}public ImmutableMap<K, V> build(){return fromEntryList(this.entries);}private static <K, V> ImmutableMap<K, V> fromEntryList(List<Map.Entry<K, V>> entries){int size = entries.size();switch (size) {case 0: return ImmutableMap.of();case 1: return new SingletonImmutableBiMap((Map.Entry)Iterables.getOnlyElement(entries));}Map.Entry<?, ?>[] entryArray = (Map.Entry[])entries.toArray(new Map.Entry[entries.size()]);return new RegularImmutableMap(entryArray);}}
之前我们判断取值结果可以使用if else形式:
int a = 1;if(a == 1) {System.out.println(a);} else {System.out.println(a);}
或者使用switch方式:
int a = 1;switch (a) {case 1:System.out.println(a);break;case 2:System.out.println(a);default:System.out.println(a);break;}
现在可以使用ImmutableMap集合来组装键值对,这样的组合方式既简单又省去了大量多余的代码:
ImmutableMap<String, Object> map = ImmutableMap .<String, Object>builder().put("1", "1").put("2", "2").put("3", "3").build();ImmutableMap<String, String> map1 = ImmutableMap .<String, String>of("1", "2");
guava中ImmutableMap使用示例及好处相关推荐
- guava 之 ImmutableMap 使用实例及好处
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. ImmutableMap 的作用就是:可以让java代码也能够创建一个对象常量映射,来保存一些常量映 ...
- 简单分析Guava中RateLimiter中的令牌桶算法的实现
为什么80%的码农都做不了架构师?>>> 令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法.典型情况下,令 ...
- 简易理解设计模式之:责任链模式——OA中请假流程示例
介绍: 责任链模式属于行为型设计模式.它的定义为:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,只到有对象处理它为止. 类图: ...
- java令牌桶_简单分析Guava中RateLimiter中的令牌桶算法的实现
令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法.典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送. ...
- 使用angular的好处_在项目中使用Angular的最大好处
使用angular的好处 by Irina Sidorenko 伊琳娜·西多连科(Irina Sidorenko) 在项目中使用Angular的最大好处 (The top benefits of us ...
- python中typing.NamedTuple示例
python中typing.NamedTuple示例 from typing import * # 导入依赖项 class Friend(NamedTuple): """ ...
- python把坐标写入文本_Python实现将数据写入netCDF4中的方法示例
本文实例讲述了Python实现将数据写入netCDF4中的方法.分享给大家供大家参考,具体如下: nc文件为处理气象数据文件.用户可以去https://www.lfd.uci.edu/~gohlke/ ...
- Guava之FluentIterable使用示例
FluentIterable 是guava集合类中常用的一个类,主要用于过滤.转换集合中的数据:FluentIterable是一个抽象类,实现了Iterable接口,大多数方法都返回FluentIte ...
- SQL Server:日志备份和差异备份还原中的常见问题示例
日志备份和差异备份还原中的常见问题示例 代码 1 --创建测试 2 CREATE DATABASE db 3 GO 4 5 --正常备份 6 BACKUP DATABASE db TO ...
最新文章
- 【FFmpeg】ffmpeg工具源码分析(二):转码核心函数 transcode
- try catch语句 java_深入剖析java的try…catch…finally语句
- 内网渗透测试:内网信息收集与上传下载
- 【Flask】数据的CRUD之增加和查询操作
- 判断listview是上滑还是下滑的方法
- 你需要administrators提供的权限才能删除_终于解决了:你需要来自XXX的权限才能对此文件进行更改
- NodeBlog v0.1.0发布
- oracle中常用的连接,Oracle 数据库中表的常用连接方式
- Json解析工具Jackson(使用注解)
- 帮你躲坑:pip install tensorflow 报错怎么办,import tensorflow 报错怎么办?
- Mac废纸篓无法清空怎么办?
- nifi服务器间拷贝文件,NIFI Kerberos 认证
- 计算机冗余,计算机中的冗余是什么意思
- [Windows]笔记本触摸板手势突然不起作用的解决办法
- 解决win10桌面管理器内存泄漏问题
- Java核心(集合类1-概述、Collection 接口 、List 集合)
- 人工智能点点通-AI开发工具介绍-钱兴会-专题视频课程
- 用JAVA编写MD5大写32位加密
- python将中文数字转化成阿拉伯数字
- HC595驱动数码管
热门文章
- 苹果升级后怎么恢复以前的版本_iPhone升级iOS14,卡在更新进程无法启动怎么办?...
- 【计算机非全日制】就业如何?可以去哪些企业?
- OA系统通知管理设计
- Dream Aquarium 1.240 汉化增强版
- hive笔记(五):查询、排序-join语句/连接/分区/sort by/distribute by/cluster by
- 用PS调出古装人像复古感色调
- 优化OEA中的聚合SQL
- train_test_split()函数
- KillCopy、TeraCopy、FastCopy
- IDEA实现同一个启动类利用不同端口启动多服务