Java怎样创建两个KEY(key-pair)的MAP

就像在XY坐标系中,一个X刻度、一个Y刻度,会对应图上的一个点,即pair(x, y) - > point,那么就有创建一个点,或者根据(x, y)来寻求一个点的需求,如果用Python的语法表达,是这个样子:

dict((x, y) : point)

然而在JAVA中却变得不容易,骨钩了一下,有这么一些方法:

使用嵌套MAP

Map<Integer, Map<Integer, V>> map = //...
// ...

map.get(2).get(5);

这种方法将水平的KEY切换成了垂直KEY,我们要找寻XY坐标系中(x, y)对应的点,其实可以先找x点的那条垂直线,然后找出这条垂直线上y高度的那个点。

但是要取得这个双KEY的VALUE,得有2次GET,实例代码没有做第一次GET的NULL判断,有隐患!并且感觉不是很直观。

Read moreJava怎样创建两个KEY(key-pair)的MAP


Java枚举类型代码的二逼写法和艺术写法

最近遇到一种需求场景:使用一个类封装Java服务端返回的(返回状态码,返回信息字符串)信息,比如(0,操作成功)、(1,新增失败)、(2,查询失败)等状态。作为一枚Java屌丝,我想到这种常量信息最好写到一个单独的类里面,并且用public static final的形式修饰,为了将返回码code和返回信息msg两者绑定起来可以提供一个公用方法。我做了以下两个努力,一是将两个返回码和返回信息的变量名写的相似,看代码的人一看就知道两个变量的含义和关系;第二个则提供一个根据返回码获得对应的返回信息的方法。写完后自我感觉良好,感觉满足了需求很是完备,于是出现了以下的2B代码:

枚举状态码和状态信息的2B写法

package net.crazyant;

/**
 * 
 * 返回给客户端的状态码和状态信息
 * 
 * @author crazyant.net
 *
 */
public class CommunicateCodeOne {
	/**
	 * 状态码:操作成功
	 */
	public static final int OPERATION_SUCCESS_CODE = 0;

	/**
	 * 状态信息:操作成功
	 */
	public static final String OPERATION_SUCCESS_MSG = "操作成功";

	/**
	 * 状态码:新增失败
	 */
	public static final int ADD_DATA_ERROR_CODE = 1;

	/**
	 * 状态信息:新增失败
	 */
	public static final String ADD_DATA_ERROR_MSG = "新增失败";

	/**
	 * 状态码:查询失败
	 */
	public static final int QUERY_DATA_ERROR_CODE = 2;

	/**
	 * 状态信息:查询失败
	 */
	public static final String QUERY_DATA_ERROR_MSG = "查询失败";

	/**
	 * 根据状态码获取状态信息
	 * 
	 * @param communicateCode
	 *            状态码
	 * @return 状态信息字符串
	 */
	public static String getMsg(int communicateCode) {
		String returnMsg = null;
		switch (communicateCode) {
		case OPERATION_SUCCESS_CODE:
			// 操作成功
			returnMsg = OPERATION_SUCCESS_MSG;
			break;
		case ADD_DATA_ERROR_CODE:
			// 新增失败
			returnMsg = ADD_DATA_ERROR_MSG;
			break;
		case QUERY_DATA_ERROR_CODE:
			// 查询失败
			returnMsg = QUERY_DATA_ERROR_MSG;
			break;
		}
		return returnMsg;
	}
}

Read moreJava枚举类型代码的二逼写法和艺术写法