根据课程ID、章节ID、试题类型、已选试题列表、所需试题数量,完成随机抽取试题API。
传入参数:
String courseId,
Integer questionType,
String chapterId,
List<String> alreadyChooseQuestion,
Integer questionAmount
由于给出的参数和条件判断非常多,导致抽取试题的复杂性很高。我们首先要根据课程ID、章节ID、试题类型来获取符合条件的所有题目ID集合;然后根据已选试题列表进行查重,获取还未被选择过的试题集合;最后再根据试题数量选取所需数量的题目。
但由于这一步一步的筛选,导致这每一步的顺序是完全不能改变的——必须挨个去重,根据未选择过的试题集合的长度,再生成对应数量和对应大小的随机数,代码就会变得很麻烦很冗余。
而运用Collections.shuffle()方法,可以为我们省去很多麻烦,让我们只需要专注于选取目标试题。
shuffle顾名思义,洗牌。传入一个List,并将其中的数据全部随机打乱。在根本上将List打乱后,我们抽取哪个位置的数据其实都是随机的,所以我们只需要抽取前n个(n为我们需要的试题数量)试题,就相当于随机抽取了n个试题。
//最终我们只需要对questionList 目标试题列表,运用shuffle方法,再抽取前n个放入结果列表中。
Collections.shuffle(questionList);
for (String s : questionList) {
while (count < questionAmount){
questionArrayList.add(s);
count++;
break;
}
}
随机抽取试题API优化
本文介绍了如何使用Collections.shuffle()方法简化随机抽取试题的复杂过程。通过先获取符合条件的试题ID集合,排除已选试题,再对剩余试题列表进行洗牌,随机抽取所需数量的试题,大大减少了代码的冗余,提高了效率。
164

被折叠的 条评论
为什么被折叠?



