示例#1
0
  /**
   * 封装材料和材料下小题
   *
   * @param questionsMap 含有试卷所有小题的map
   */
  private void fixArtAndQuestions(Map<Integer, List<Question>> questionsMap) {
    for (Iterator<List<Question>> iterator = questionsMap.values().iterator();
        iterator.hasNext(); ) {
      List<Question> questions = iterator.next();
      List<Integer> needRemovedQues = null;
      for (Iterator<Question> iterator2 = questions.iterator(); iterator2.hasNext(); ) {
        Question question = iterator2.next();
        if (question.getQuestionType() == 6) { // 当前小题是材料时,才进行添加孩子小题的操作
          int quesIndex = questions.indexOf(question); // 得到当前小题的索引
          String referIds = question.getReferIds();
          if (!referIds.equals("")) {
            // 由于查出的数据是按照顺序排列的,所以材料下的小题的索引是紧接着材料的索引号的
            for (int i = 1; i <= referIds.split(",").length; i++) {
              question.addChildQuestion(questions.get(quesIndex + i));
              if (needRemovedQues == null) needRemovedQues = new ArrayList<Integer>();
              needRemovedQues.add(quesIndex + i); // 将小题存到需删除小题列表中
            }
          }
        }
      }

      if (needRemovedQues != null) {
        for (int i = 0; i < needRemovedQues.size(); i++) // 删除材料下小题
        questions.remove(needRemovedQues.get(i));
      }
    }
  }