获得随机数据的对应场景是:我是一个增删改查的码畜,接到了一个任务。我面对的数据是故事服务,故事有type类型,每个type比如joke笑话下面还有一堆的笑话元数据。
如果我对数据查找的时候就是一个type对应一个集合。所有type的集合加起来,数据量不大只有10万条左右。第一次我想获得一条故事数据,第二次再次获取数据要保证数据type和故事的元数据不同,达到type和故事元数据随机
type 指向 list的map的集合
//全局存放故事的id集合
static Map<String, List<String>> storyTypeMap = new HashMap<>();
第一步要在map的key随机获得, randomSubType是根据map的key集合的大小生成的随机数
storyTypeMap.get(randomSubType);
下面是整个方法的代码
因为key指向的list,再次根据list集合大小生成随机数,也就是随机下标。
该方法的步骤:
- 获得随机key;
- 根据随机key获得对应的list;
- 根据list.size()随机一个下标index出来。这样就达到了,map中的key和list全部随机。
querySubTypeFlag=false;
//根据type获取对应sbuType集合
List<String> subTypeList = countStory(queryParam.getType());
List<String> idList = new ArrayList<>();
//防止进入死循环,只允许有限次数的操作
int index=0;
do {
//map的key集合大小生成随机数
String randomSubType = subTypeList.get((int)(Math.random()* subTypeList.size()));
//key指向的list,再次根据list集合大小生成随机数,也就是随机下标
idList = storyTypeMap.get(randomSubType);
if(null != idList && 0 != idList.size()) {
randomId =idList.get((int)(Math.random()* idList.size()));
}
index++;
} while((idList == null || idList.size() == 0) && index < 50);