前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
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?
?