/ 闲敲棋子 / 记在各种乱七八糟的事儿之中

记在各种乱七八糟的事儿之中

2012-02-17 posted in [遇到问题]

最近真的挺忙, 没时间好好整理成文了. 大牛随手指点两三招, 比自己闷头写代码学到的真心多啊. 多数是一些代码习惯, 可能说的时候很习惯就那样做了, 过段时间又忘了. 记下来吧, 也是成长的过程呢.

以下整理自近期和大牛的聊天记录…

例如:这个DtXmsMtN实体类里,status是数据库存的字段,其中Y表示成功,其他表示失败…我想把它翻译成中文,有两个地方可以修改,一个是实体类初始化setStatus()时, 对这个自定义的statusStr进行翻译. 另一种是在getStatusStr时, 对status进行判断并翻译. 如下…

public class DtXmsMtN {

	@Column(value = "STATUS")
	private String status;

	private String statusStr;

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}
	
	public String getStatusStr() {
		if (status.equals("Y"))
			statusStr = "成功";
		else
			statusStr="失败";
		return statusStr;
	}
}

另外, 大牛教育说, 不要为了一时的小省事儿而去丢掉数据库中的原始信息. 除非你确定以后再也不会用它. 否则不要直接去修改实体类中status的值, 而应该是建一个显示值来显示它~ so… 学习了~

其实是对HashSet性质的一种巧妙的应用~ 不能不崇拜大牛啊… 好吧,还是我自己没见识~ 代码说明一切.

/**
 * 计算群组会员数(去重后)
 * @param userid
 * @param groupids
 * @return 总计可发送人数
 */
@SuppressWarnings("unchecked")
public int CountOfGroups(int userid, int... groupids){
	//TODO performance issue
	Set<String> unique = new HashSet<String>();
	for (int groupid : groupids) {
		boolean isDefault = isGlobalDefaultGroup(groupid);
		String sql = getRuleSqlByGroupid(userid, groupid, isDefault, "buyer_id");
		log.debug(sql);
		String cacheKey = "UserGroup::BuyerId:" + Coder.encryptMD5(sql);
		List<String> list = (List<String>) cachedClient.get(cacheKey);
		if (list == null) {
			list = dao.getJdbcTemplate().queryForList(sql, String.class);
			cachedClient.put(cacheKey, list);
		}

		if (list != null) {
			unique.addAll(list); //<--亮点在这里
			log.debug(groupid + "," + list.size() + "," + unique.size());
		}
	}
	return unique.size();
} 

上面就是利用了HashSet的性质, 顺道查了一下HashSet的实现.

HashSet 的实现其实非常简单,它只是封装了一个 HashMap 对象来存储所有的集合元素,所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个 PRESENT,它是一个静态的 Object 对象。

巧用这件事儿还真得从性质入手, 但是光知道性质还不好使. 重点是灵活运用~ 要是实在想不到怎么用也行, 那就看到了别人的代码记下来. 然后运用~~ 啦啦~~我又好开心…