随机抽取优化

随机抽取试题API优化
本文介绍了如何使用Collections.shuffle()方法简化随机抽取试题的复杂过程。通过先获取符合条件的试题ID集合,排除已选试题,再对剩余试题列表进行洗牌,随机抽取所需数量的试题,大大减少了代码的冗余,提高了效率。

        根据课程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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值