应用场景:对于考试试卷选择题选项的乱序对应问题,防止考生作弊,每个人的题目都是不一样的选项顺序。

package com.muyuan.platform.elearning.util;

import com.alibaba.fastjson.JSONObject;
import com.muyuan.platform.elearning.vo.exam.QuestionVo; import java.util.*; /**
* 乱序工具类
*/
public class QuestionSelectRevertUtils { /**
* 打乱Map key-value顺序,重新组合key-value
*
* @param questionJson
* @return
*/
public static Map<String, String> toDisOrder(String questionJson) {
QuestionVo questionVo = JSONObject.parseObject(questionJson, QuestionVo.class);
Map<String, String> map = questionVo.getOptionsMap();
String correctValue = map.get(questionVo.getCorrectOptions());
List<String> valueList = new ArrayList<>();
List<String> keyList = new ArrayList<>();
for (Map.Entry<String, String> entry : map.entrySet()) {
keyList.add(entry.getKey());
valueList.add(entry.getValue());
}
Collections.shuffle(valueList);
HashMap<String, String> revertMap = new HashMap<>();
for (int i = 0; i < keyList.size(); i++) {
revertMap.put(keyList.get(i), valueList.get(i));
}
QuestionVo vo = new QuestionVo();
for (Map.Entry<String, String> entry : revertMap.entrySet()) {
if (entry.getValue().equals(correctValue)) {
vo.setCorrectOptions(entry.getKey());
vo.setCorrectValue(correctValue);
}
}
vo.setOptionsMap(revertMap);
vo.setQuestionContent(questionVo.getQuestionContent());
System.out.println("revertMap: " + JSONObject.toJSON(vo));
return revertMap;
} public static String setOptions() {
QuestionVo questionVo = new QuestionVo();
questionVo.setQuestionContent("中华人民共和国的首都是哪里?");
Map<String, String> map = new HashMap<>();
map.put("A", "北京");
map.put("B", "天津");
map.put("C", "上海");
map.put("D", "重庆");
questionVo.setOptionsMap(map);
questionVo.setCorrectOptions("A");
questionVo.setCorrectValue("北京");
System.out.println("originMap: " + JSONObject.toJSON(questionVo));
return JSONObject.toJSONString(questionVo);
} public static void main(String[] args) {
String s = setOptions();
System.out.println("\r\n");
int i = 0;
while (i < 10) {
toDisOrder(s);
i++;
}
}
}

输出结果:

originMap: {"questionContent":"中华人民共和国的首都是哪里?","correctValue":"北京","optionsMap":{"A":"北京","B":"天津","C":"上海","D":"重庆"},"correctOptions":"A"}

revertMap: {"questionContent":"中华人民共和国的首都是哪里?","correctValue":"北京","optionsMap":{"A":"重庆","B":"上海","C":"天津","D":"北京"},"correctOptions":"D"}
revertMap: {"questionContent":"中华人民共和国的首都是哪里?","correctValue":"北京","optionsMap":{"A":"北京","B":"上海","C":"重庆","D":"天津"},"correctOptions":"A"}
revertMap: {"questionContent":"中华人民共和国的首都是哪里?","correctValue":"北京","optionsMap":{"A":"上海","B":"重庆","C":"天津","D":"北京"},"correctOptions":"D"}
revertMap: {"questionContent":"中华人民共和国的首都是哪里?","correctValue":"北京","optionsMap":{"A":"重庆","B":"北京","C":"天津","D":"上海"},"correctOptions":"B"}
revertMap: {"questionContent":"中华人民共和国的首都是哪里?","correctValue":"北京","optionsMap":{"A":"北京","B":"天津","C":"上海","D":"重庆"},"correctOptions":"A"}
revertMap: {"questionContent":"中华人民共和国的首都是哪里?","correctValue":"北京","optionsMap":{"A":"天津","B":"北京","C":"上海","D":"重庆"},"correctOptions":"B"}
revertMap: {"questionContent":"中华人民共和国的首都是哪里?","correctValue":"北京","optionsMap":{"A":"上海","B":"重庆","C":"天津","D":"北京"},"correctOptions":"D"}
revertMap: {"questionContent":"中华人民共和国的首都是哪里?","correctValue":"北京","optionsMap":{"A":"北京","B":"重庆","C":"天津","D":"上海"},"correctOptions":"A"}
revertMap: {"questionContent":"中华人民共和国的首都是哪里?","correctValue":"北京","optionsMap":{"A":"上海","B":"重庆","C":"北京","D":"天津"},"correctOptions":"C"}
revertMap: {"questionContent":"中华人民共和国的首都是哪里?","correctValue":"北京","optionsMap":{"A":"上海","B":"重庆","C":"北京","D":"天津"},"correctOptions":"C"}

打乱Map key - value的对应顺序的更多相关文章

  1. Java中Map<Key, Value>存储结构根据值排序(sort by values)

    需求:Map<key, value>中可以根据key, value 进行排序,由于 key 都是唯一的,可以很方便的进行比较操作,但是每个key 对应的value不是唯一的,有可能出现多个 ...

  2. Map<Key,Value>基于Value值排序

    Map<Key,Value> 排序默认是按照KEY值的升序来进行. 针对按照Value来进行排序有两种方法: 第一种 使用TreeMap  代码如下 public class test{ ...

  3. map访问key不存在的情况下,用find。比[]直接访问的意思不一样,map[key]不返null

    key不存在的话则创建一个pair并调用默认构造函数 map<CGuid, CLibItem>::iterator iterItem = m_world->m_library_sce ...

  4. Sass Maps的函数-map-remove($map,$key)、keywords($args)

    map-remove($map,$key) map-remove($map,$key) 函数是用来删除当前 $map 中的某一个 $key,从而得到一个新的 map.其返回的值还是一个 map.他并不 ...

  5. Sass函数:Sass Maps的函数-map-has-key($map,$key)

    map-has-key($map,$key) 函数将返回一个布尔值.当 $map 中有这个 $key,则函数返回 true,否则返回 false. 前面的示例,当 $key 不在 $map 中时,使用 ...

  6. Sass函数:Sass Maps的函数-map-get($map,$key)

    map-get($map,$key) 函数的作用是根据 $key 参数,返回 $key 在 $map 中对应的 value 值.如果 $key 不存在 $map中,将返回 null 值.此函数包括两个 ...

  7. Go语言 判断key是否在map里 if _, ok := map[key]; ok

    if val, ok := map[key]; ok { //do something here } 如果key在map里 val 被赋值map[key] ok 是true 否则val得到相应类型的零 ...

  8. 关于Map迭代循环,key和value的顺序问题

    使用Hashtable,keySet()返回的顺序为降序(key降顺序) ---->6, 5, 4, 3, 2, 1使用TreeMap,keySet()返回的顺序为升序(key升顺序) ---- ...

  9. 对map创建出来的值顺序排序问题

    TreeMap 在用Ajax动态创建checkBox时,而把值放在了HashMap中,hashMap是无序的,因此你动态创建出来的顺序是乱的,比如你想要的顺序是1.2.3.4但出来的结果可能是 3.2 ...

随机推荐

  1. Python之format字符串格式化

    1.字符串连接 >>> a = 'My name is ' + 'Suen' >>> a 'My name is Suen' >>> a = 'M ...

  2. D - 活动选择

    Description 学校的大学生艺术中心周日将面向全校各个学院的学生社团开放,但活动中心同时只能供一个社团活动使用,并且每一个社团活动开始后都不能中断.现在各个社团都提交了他们使用该中心的活动计划 ...

  3. Redis 入门与 ASP.NET Core 缓存

    目录 基础 Redis 库 连接 Redis 能用 redis 干啥 Redis 数据库存储 字符串 订阅发布 RedisValue ASP.NET Core 缓存与分布式缓存 内存中的缓存 ASP. ...

  4. 微服务nacos服务注册与发现

    一,以上一篇为基础 微服务从nacos配置中心获得配置信息 给service1, service2添加依赖 <dependency> <groupId>com.alibaba. ...

  5. pyqt5屏幕坐标系

    我们直接用代码去理解屏幕坐标系 import sys from PyQt5.QtWidgets import QHBoxLayout,QMainWindow,QApplication,QPushBut ...

  6. 使用MediaRecorder录音

    Android提供了两个API用于录音的实现:MediaRecorder 和AudioRecord. MediaRecorder:录制的音频文件是经过压缩后的,需要设置编码器.并且录制的音频文件可以用 ...

  7. JavaScript正则表达式随笔

    概念先行. 正则表达式:又称规则表达式.常用于检索,替换符合某种符合(规则)的文本. 组成:普通字符和元字符,普通字符就是一个普通的查找串,如abc,原字符具有特殊含义. 这里研究的是JavaScri ...

  8. Jupyter Notebook使用教程

    关于安装我就不说了,可以参考知乎https://zhuanlan.zhihu.com/p/33105153(总结的很全面) 首先打开Jupyter Notebook后,新建notebook:点击右上角 ...

  9. [阿里DIN] 从论文源码学习 之 embedding层如何自动更新

    [阿里DIN] 从论文源码学习 之 embedding层如何自动更新 目录 [阿里DIN] 从论文源码学习 之 embedding层如何自动更新 0x00 摘要 0x01 DIN源码 1.1 问题 1 ...

  10. SpringBoot第三集:热部署与单元测试(2020最新最易懂)

    SpringBoot第三集:热部署与单元测试(2020最新最易懂) 有兴趣的可以先参考附录简单了解SpringBoot自动装配流程. 一.SpringBoot开发热部署 项目开发中,你是否也遇到更新配 ...