请教,问下这个Map 该怎么写?多层嵌套

muwanbo 2010-06-01 12:00:08
有一张表 t_sym_crm_dict

有如下数据:

DICT_ID DICT_TYPEID DICT_NAME CITY_ID

1003 PM_DEDUDTTYPE 限时扣费(每月06~10日) 200
1011 PM_DEDUDTTYPE 短信银行划扣充值 200
1012 PM_DEDUDTTYPE 自动银行划扣充值 200
001 PM_PAYMENTTYPE 后付费 200
002 PM_PAYMENTTYPE 预付费(智能网平台) 200
003 PM_PAYMENTTYPE 预付费(计费帐务系统) 200
01 CM_CERTTYPE 身份证 760
02 CM_CERTTYPE 军官证 760
03 CM_CERTTYPE 护照 760
04 CM_CERTTYPE 户口本 760
01 CM_CUSTTYPE 大客户 760
02 CM_CUSTTYPE 商业客户 760
03 CM_CUSTTYPE 普通客户 760
04 CM_CUSTTYPE 流动客户 760
05 CM_CUSTTYPE 公免 760
。。。

现在要把这些数据装在一个这样的Map结构里:
Map<String, Map<String, LinkedHashMap<String, TSymCrmDict>>>

最外层Map key=CITY_ID 中间一层key=DICT_TYPEID 最里面是key=DICT_ID

这个是三层的结构 两层的我会 三层不知道咋办了。 各位大大们 能帮帮小弟么?

附上两层的代码 高手可忽略跳过。。。

以下是两层的写法。

// 查询全部字典
String HQL="from TSymCrmDict t order by t.cityId,t.dicttypeId,t.dictId";

Map<String, LinkedHashMap<String, TSymCrmDict>> dictMap = new HashMap<String, LinkedHashMap<String, TSymCrmDict>>();
//查询出列表对象集合
List<TSymCrmDict> dictList = session.createQuery(hql).list();
Iterator it = dictList.iterator();
// 构建Map
String lastType = "".intern();
LinkedHashMap<String, TSymCrmDict> subMap = new LinkedHashMap<String, TSymCrmDict>();
while (it.hasNext()) {
TSymCrmDictdict = (TSymCrmDict)it.next();
String dictType = dict.getDictTypeid().intern();
// dictTypeId和上次不同
if (dictType.intern() != lastType.intern()) {
// 加入到map
if (!subMap.isEmpty()) {
dictMap.put(lastType.intern(), subMap);
}
subMap = new LinkedHashMap<String, TSymCrmDict>();
subMap.put(dict.getDictId().intern(), dict);
}
// dictTypeId和上次相同
else {
subMap.put(dict.getDictId().intern(), dict);
}
// 加入最后一个列表
if (!it.hasNext()) {
dictMap.put(dictType.intern(), subMap);
}
lastType = dictType.intern();
}

上面是两层的 外面一层Key=dicttypeId 里面一层 key=dictid
由于业务需要现在又多了一个cityId在最外层。 各位大大们,帮帮忙。。
...全文
386 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
百球恩 2010-06-01
  • 打赏
  • 举报
回复
LinkedHashMap put和get都很慢 忽忽
  • 打赏
  • 举报
回复
Map<String, Map<String, LinkedHashMap<String, TSymCrmDict>>>

竟然会想出这样的结构,真的是很好很强大!
crazylaa 2010-06-01
  • 打赏
  • 举报
回复
那你在最外层照抄
if (dictType.intern() != lastType.intern()) {
处理的这段不就好啦
龙四 2010-06-01
  • 打赏
  • 举报
回复
字数太多
muwanbo 2010-06-01
  • 打赏
  • 举报
回复
嗯 我自己搞定了。
henoy 2010-06-01
  • 打赏
  • 举报
回复
貌似很麻烦。。。。
开跑车的猪 2010-06-01
  • 打赏
  • 举报
回复
真的是太有创意了

lz你简直就是天才
colin_pxx 2010-06-01
  • 打赏
  • 举报
回复
map层次太多了并不好 相当于循环里面套循环一样
危险的大猫 2010-06-01
  • 打赏
  • 举报
回复
啊..有创意.
izard999 2010-06-01
  • 打赏
  • 举报
回复
结构搞得太复杂了不好!
亏LZ是怎么想出来的

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧