打乱Map key - value的对应顺序
应用场景:对于考试试卷选择题选项的乱序对应问题,防止考生作弊,每个人的题目都是不一样的选项顺序。
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的对应顺序的更多相关文章
- Java中Map<Key, Value>存储结构根据值排序(sort by values)
需求:Map<key, value>中可以根据key, value 进行排序,由于 key 都是唯一的,可以很方便的进行比较操作,但是每个key 对应的value不是唯一的,有可能出现多个 ...
- Map<Key,Value>基于Value值排序
Map<Key,Value> 排序默认是按照KEY值的升序来进行. 针对按照Value来进行排序有两种方法: 第一种 使用TreeMap 代码如下 public class test{ ...
- map访问key不存在的情况下,用find。比[]直接访问的意思不一样,map[key]不返null
key不存在的话则创建一个pair并调用默认构造函数 map<CGuid, CLibItem>::iterator iterItem = m_world->m_library_sce ...
- Sass Maps的函数-map-remove($map,$key)、keywords($args)
map-remove($map,$key) map-remove($map,$key) 函数是用来删除当前 $map 中的某一个 $key,从而得到一个新的 map.其返回的值还是一个 map.他并不 ...
- Sass函数:Sass Maps的函数-map-has-key($map,$key)
map-has-key($map,$key) 函数将返回一个布尔值.当 $map 中有这个 $key,则函数返回 true,否则返回 false. 前面的示例,当 $key 不在 $map 中时,使用 ...
- Sass函数:Sass Maps的函数-map-get($map,$key)
map-get($map,$key) 函数的作用是根据 $key 参数,返回 $key 在 $map 中对应的 value 值.如果 $key 不存在 $map中,将返回 null 值.此函数包括两个 ...
- 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得到相应类型的零 ...
- 关于Map迭代循环,key和value的顺序问题
使用Hashtable,keySet()返回的顺序为降序(key降顺序) ---->6, 5, 4, 3, 2, 1使用TreeMap,keySet()返回的顺序为升序(key升顺序) ---- ...
- 对map创建出来的值顺序排序问题
TreeMap 在用Ajax动态创建checkBox时,而把值放在了HashMap中,hashMap是无序的,因此你动态创建出来的顺序是乱的,比如你想要的顺序是1.2.3.4但出来的结果可能是 3.2 ...
随机推荐
- swoft运行流程
启动命令 php bin/swoft http:start 或者 swoftctl run -c http:start 1 入口文件 bin/swoft.php #!/usr/bin/env php ...
- 第二十五章 ansible基础
一.Ansible概述 1.什么是Ansible Ansible是一个自动化统一配置管理工具,自动化主要体现在Ansible集成了丰富模块以及功能组件,可以通过一个命令完成一系列的操作,进而能减少重复 ...
- pychartdir模块安装
python模块pychartdir导入问题 在迁移别人写好的脚本时,发现pychartdir没有导入,脚本执行报错.以下是报错内容: [modps@LGJF-ZYC5-MMSC-WEB02 ~]$ ...
- npm 注册淘宝镜像
临时使用 npm --registry https://registry.npm.taobao.org install express 1 2.持久使用 npm config set registry ...
- 3分钟学完Python,直接从入门到精通
作为帅气小编,我已经把python一些模块的甩在这儿了qwq,只要你拿到这些干货,包你玩转python,直接冲向"大佬"的段位,如果已经学了C或者C++或者说如果你需要你的一段关键 ...
- Python开发 常见异常和解决办法
1.sqlalchemy创建外键关系报错property of that name exists on mapper SQLAlchemy是Python编程语言下的一款开源软件,提供了SQL工具包及对 ...
- 立即执行函数 - Js函数笔记
立即执行函数 定义:此类函数没有声明,在执行一次后即释放,适合做初始化. 针对初始化功能的函数,同时遵循一句话,只有表达式才能被执行符号执行 1.(function() {...}()); - W3C ...
- 解谜:为何用了9-Patch背景图后自带Padding属性?
本次分享的主题源于笔者在实际开发中遇到的问题. 具体现象为:当普通的9-Patch图用作TextView的backGround属性后,整个TextView便有了一定的Padding值.但笔者并没有给定 ...
- ret2libc--ROP(pwn)漏洞入门分析
背景知识 fflush 函数,清理缓冲区. fflush(stdout) 一次性输出以上缓冲区所有数据 read(0,&buf,0xAu) 0代表标准输入,标准输出1,标准错误2,&b ...
- Error in mounted hook: "TypeError: handlers[i].call is not a function" 原因
Error in mounted hook: "TypeError: handlers[i].call is not a function" 百度翻译 安装钩子中的错误:" ...