前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

ImmutableMap 的作用就是:可以让java代码也能够创建一个对象常量映射,来保存一些常量映射的键值对。

分析以下情景,来具体讨论这个的好处。

以下是在js前台的代码,假设现在有需求如下:
根据数据库存的某个key字段,来获得不同的提示名字。有以下3种处理方法
1:用 多个 if else 语句,只要新添加个字段,你就得添加个 if else    ,差评
2:用 switch case  语句,只要新添加个字段,你就得添加个 case       ,差评
3:用 对象映射 方法,如下所示。 新建字段,只需要添加一行就好       ,好评

下面比较几种实现方法的

1.if else 语句和switch case 是一个水平的东西。

function getDevName(assetSubType){switch(assetSubType){case "router":assetSubType = "路由器";break;case "switchboard":assetSubType = "交换机";break;case "virtualMac":assetSubType = "虚拟机";break;case "physicalMac":assetSubType = "物理机";break;case "firewall":assetSubType = "防火墙";break;case "secretMac":assetSubType = "加密机";break;case "storage":assetSubType = "存储";break;case "host":assetSubType = "主机";break;case "safetyEq":assetSubType = "安全设备";break;case "other":assetSubType = "其它";break;default:assetSubType = assetSubType;}return assetSubType;
}

然后在其他地方调用的时候,具体调用。
getDevName(assetSubType);
看麻烦不。现在若要增加一个,你还得继续修改代码,添加一对 if else 或者 switch case。

3.然后是换成对象,然后以key value的形式去获得值。

var assetSubTypeKeyValueMap = {"router": "路由器","switchboard": "交换机","virtualMac": "虚拟机","physicalMac": "物理机","firewall": "防火墙","secretMac": "加密机","storage": "存储","host": "主机","safetyEq": "安全设备","other": "其它"
};

然后再看这个的调用方式。

function getSubTypeName(assetSubType) {return assetSubTypeKeyValueMap[assetSubType];
}

性能优化的人,为什么就那么牛逼呢。

再看个类似的例子:

var inputDefObj = {30: "IP地址或地址段",31: "端口号或范围",32: "IP地址或地址段",33: "端口号或范围",34: "代码值",38: "探针名称",39: "网络协议号(protocol)",40: "ipv6源IP(ipv6_src_addr)",41: "ipv6目标IP(ipv6_dst_addr)",42: "网络协议名称(protocol_map)",43: "输入接口snmp(input_snmp)",};

//具体用法:

inputDefault.prop("placeholder", inputDefObj[key]);//key即为前面的数字,以此来获得后面的提示语。

js里面可以很简单的以key,value的形式建立常量对象,然后可以很方便的用key,得到value。

然而java的map也是可以的。具体怎么实现就看实例:

package com.lxk.guavaTest;import com.google.common.collect.ImmutableMap;import java.util.Map;/*** 定义一些常量Map<?,?>* <p>* Created by lxk on 2016/11/17*/
interface ConstantMap {Map<Integer, String> INTEGER_STRING_MAP =new ImmutableMap.Builder<Integer, String>().put(30, "IP地址或地址段").put(31, "端口号或范围").put(32, "IP地址或地址段").put(33, "端口号或范围").put(34, "代码值").put(38, "探针名称").put(39, "网络协议号(protocol)").put(40, "ipv6源IP(ipv6_src_addr)").put(41, "ipv6目标IP(ipv6_dst_addr)").put(42, "网络协议名称(protocol_map)").put(43, "输入接口snmp(input_snmp)").build();
}/*** guava ImmutableMap 测试实例* <p>* Created by lxk on 2016/11/14*/
public class ImmutableMapTest {public static void main(String[] args) {immutableMapTest();}/*** 测试 guava ImmutableMap*/private static void immutableMapTest() {Integer key = 30;System.out.println("key = " + key + "的提示语是:" + ConstantMap.INTEGER_STRING_MAP.get(key));}
}

这个map里面key和value和我们用map是一样的,可以任意对象。
方便在java代码里面操作,使得switch case,又长又啰嗦又不好维护的if else语句,变得简单愉快。

具体只有用了才知道。

这个算是编程思想上的进步吧

转自:https://blog.csdn.net/qq_27093465/article/details/53212577

guava 之 ImmutableMap 使用实例及好处相关推荐

  1. guava中ImmutableMap使用示例及好处

    ImmutableMap是不可变的,线程安全的:它可以创建一些常量的映射键值对:他提供了很多的组合键值对的方法,源码中使用了一个静态内部类来组装构建ImmutableMap,静态内部类作为外部类的辅助 ...

  2. java guava map_使用googled的guava常见ImmutableMap、Multimap、Sets、Optional、Objects及Preconditions检查等用法...

    一.前言 关于google的guava-19.0.jar开源包中非空检查Preconditions.checkArgument.Objects.toStringHelper对象转换为字符串toStri ...

  3. Google Guava Cache--localcache本地缓存实例

    何为缓存?本地缓存类似于map,当给定一个key,首先查找缓存中是否已经有值了,如果有则直接返回数据:相反如果不存在这样的key,则将新的内容value值缓存起来,以便下一次来查询,可以快速返回. 当 ...

  4. 使用 Google Guava Striped 实现基于 Key 的并发锁

    写 Java 代码至今,在应对可能冲突的共享资源操作时会尽量用 JDK 1.5 开始引入的并发锁(如 Lock 的各类实现类, ReentrantLock 等) 进行锁定,而不是原来的 synchro ...

  5. 每天都在用 Map,这些核心技术你知道吗?

    来自:程序通事 本篇文章站在多线程并发安全角度,带你了解多线程并发使用 HashMap 将会引发的问题,深入学习 ConcurrentHashMap ,带你彻底掌握这些核心技术. 全文摘要: Hash ...

  6. JavaFX 2.0条形图和散点图(以及JavaFX 2.1 StackedBarCharts)

    JavaFX 2.0提供了用于生成图表的内置功能,该功能可在javafx.scene.chart包中找到. 在本文中,我将介绍如何使用JavaFX 2.0创建条形图和散点图 . 在本文的学习过程中,我 ...

  7. Nginx测试实验--rest服务端负载均衡应用

    2019独角兽企业重金招聘Python工程师标准>>> Nginx版本如何查看(windows系统下) 使用命令 nginx -v 试验准备--试验环境为单位局域网 0.准备两个服务 ...

  8. Java 的最佳实践

    Java 是在世界各地最流行的编程语言之一, 但是看起来没人喜欢使用它.而 Java 事实上还算是一门不错的语言,随着 Java 8 最近的问世,我决定编制一个库,实践和工具的清单,汇集 Java 的 ...

  9. javamap的用法_Java Map常用的几种用法。

    Java Map常用的几种用法. 通常,Map是由一组键值对组成的数据结构,每个键只能在映射中出现一次.这篇文章总结了有关如何使用Java Map及其实现的类的前9个常见问题解答.为了简单起见,我将在 ...

最新文章

  1. 测试php性能和mysql数据库性能的工具_和找出瓶颈的方法_php面试基础题
  2. 为什么要使用多用户开源商城系统
  3. 分布式缓存系统Memcached简介与实践(.NET memcached client library)
  4. time datetime 模块
  5. libevent源码学习-----阅读心得
  6. 入门训练 Fibonacci数列 c语言
  7. linux vi行尾总是显示颜色,【转载】Linux 下使用 vi 没有颜色的解决办法
  8. ==与equal在java中应用的感悟
  9. Linux内核自旋锁
  10. Ubuntu配置TFTP服务器
  11. css 动画类库Animate.css
  12. bom 根据一阶 BOM 表整理多阶层 BOM 表
  13. win10熄屏时间不对_详解win10屏幕熄屏时间设置教程
  14. SDUT 第十届校赛H menhera酱那惨不忍睹的数学 【二分图 || 网络流】
  15. uniapp生成海报
  16. Hyper-v 实现桌面虚拟化
  17. 【玩转微信公众平台之中的一个】序章(纯粹扯淡)
  18. 臭名昭著的Java”
  19. 微信小程序给echarts图表动态赋值
  20. 读唐巧博客2011年总结感想

热门文章

  1. flink(一个流处理,一个批处理)
  2. 【HDU - 4417】Super Mario(查询区间小于K的数的个数,主席树)
  3. 【POJ - 1751】Highways (最小生成树)
  4. 从零开始学视觉Transformer (10):目标检测DETR-1
  5. 百度飞桨顶会论文复现(5):视频分类论文之《Representation Flow for Action Recognition》篇
  6. 11.Pipelines
  7. linux防火墙配置连接atlas,ATLAS在ubuntu下的安装使用
  8. java servlet 转发和重定向_JavaWeb(一)Servlet中乱码解决与转发和重定向的区别
  9. 石油计算机测控技术现场总线,中国石油北京《计算机测控技术》第二阶段在线作业...
  10. IDEA启动Tomcat AJP连接器配置secretRequired=“true“,但是属性secret确实空或者空字符串,这样的组合是无效的解决办法