map中获得随机数据

获得随机数据的对应场景是:我是一个增删改查的码畜,接到了一个任务。我面对的数据是故事服务,故事有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集合大小生成随机数,也就是随机下标。

该方法的步骤:

  1. 获得随机key;
  2. 根据随机key获得对应的list;
  3. 根据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);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值