java-multimap使用

       在开发当中难免list存在嵌套的情况,通常的实现方式是使用两个for循环嵌套,这样使得执行步骤增加,大大降低了系统的性能。


       项目背景: 存在te_questionmain表和te_questionsub表,是一对多的关系,学生段抽题从这两张表中根据papermain字段将List<Questionmain>和List<Questionsub>全部查出来,为了保证数据不重复,不适用sql的连接表查询语句;系统应用的java版本是1.7,因此不具备1.8以后的list筛选功能。实现方式只能是查出两个list集合以后,将List<Questionsub>插入到对应的List<QuestionMain>当中。


        使用两层for循环的实现的方式:

List<Questionmain> questionmains2=new ArrayList<Questionmain>();
for(Questionmain questionmain:questionmains){
    for(Questionsub questionsub:questionsubs){
	List<Questionsub>questionsubs2=new ArrayList<Questionsub>();
	if(questionsub.getQuestionmainID.equals(questionmain.getId)){
	    questionsubs2.put(quesionsub);
	}
	questionmain.setQuestionsubList(questionsubs2)
    }
}

使用mutimap的实现方式:

//将questionsub放到multimap中
Multimap<String,QuestionSub>quetionSubMutimap=ArrayListMultimap.create();
Iterator iterator =questionSubs.iterator();
while(iterator.hasNext()){
	QuestionSub questionSub=(QuestionSub)iterator.next();
	quetionSubMutimap.put(questionSub.getPaperMainId(), questionSub);
}

Iterator iterator2=questionMains.iterator();
while(iterator2.hasNext()){
	QuestionMain questionMain=(QuestionMain)iterator2.next();
	List<QuestionSub>questionSubs3=new ArrayList<QuestionSub>();
	// 将collection中存在的questionsub实体放入到list中
	if(quetionSubMutimap.containsKey(questionMain.getId())){
		Collection<QuestionSub>questionSubs2=quetionSubMutimap.get(questionMain.getId());
		for (QuestionSub questionSub : questionSubs2) {
			questionSubs3.add(questionSub);
		}
	}
	questionMain.setQuestionsubList(questionSubs3);
}

        从该实例中我们可以看出multimap是一个id对应多个实体,且在存放的过程中自动将实体进行归类,形成格式是Multimap<String,Collection<T>>.


       详细的multimap使用方法请参照:《Guava 之 Multimap 用法简介》

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值