map中获得随机数据

获得随机数据的对应场景是:我是一个增删改查的码畜,接到了一个任务。我面对的数据是故事服务,故事有type类型,每个type比如joke笑话下面还有一堆的笑话元数据。

如果我对数据查找的时候就是一个type对应一个集合。所有type的集合加起来,数据量不大只有10万条左右。第一次我想获得一条故事数据,第二次再次获取数据要保证数据type和故事的元数据不同,达到type和故事元数据随机

type 指向 list的map的集合

//全局存放故事的id集合
static Map> storyTypeMap = new HashMap<>();

第一步要在map的key随机获得, randomSubType是根据map的key集合的大小生成的随机数

storyTypeMap.get(randomSubType);

下面是整个方法的代码

因为key指向的list,再次根据list集合大小生成随机数,也就是随机下标。

该方法的步骤:

  1. 获得随机key;
  2. 根据随机key获得对应的list;
  3. 根据list.size()随机一个下标index出来。这样就达到了,map中的key和list全部随机。
querySubTypeFlag=false;
//根据type获取对应sbuType集合
List subTypeList = countStory(queryParam.getType());
List 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);

 

你可能感兴趣的:(算法,实际开发笔记)