在开发当中难免list存在嵌套的情况,通常的实现方式是使用两个for循环嵌套,这样使得执行步骤增加,大大降低了系统的性能。
项目背景: 存在te_questionmain表和te_questionsub表,是一对多的关系,学生段抽题从这两张表中根据papermain字段将List和List全部查出来,为了保证数据不重复,不适用sql的连接表查询语句;系统应用的java版本是1.7,因此不具备1.8以后的list筛选功能。实现方式只能是查出两个list集合以后,将List插入到对应的List当中。
使用两层for循环的实现的方式:
List questionmains2=new ArrayList();
for(Questionmain questionmain:questionmains){
for(Questionsub questionsub:questionsubs){
Listquestionsubs2=new ArrayList();
if(questionsub.getQuestionmainID.equals(questionmain.getId)){
questionsubs2.put(quesionsub);
}
questionmain.setQuestionsubList(questionsubs2)
}
}
使用mutimap的实现方式:
//将questionsub放到multimap中
MultimapquetionSubMutimap=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();
ListquestionSubs3=new ArrayList();
// 将collection中存在的questionsub实体放入到list中
if(quetionSubMutimap.containsKey(questionMain.getId())){
CollectionquestionSubs2=quetionSubMutimap.get(questionMain.getId());
for (QuestionSub questionSub : questionSubs2) {
questionSubs3.add(questionSub);
}
}
questionMain.setQuestionsubList(questionSubs3);
}
从该实例中我们可以看出multimap是一个id对应多个实体,且在存放的过程中自动将实体进行归类,形成格式是Multimap>.