1. 程式人生 > >map中獲得隨機資料

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);