map中獲得隨機資料
阿新 • • 發佈:2019-01-01
獲得隨機資料的對應場景是:我是一個增刪改查的碼畜,接到了一個任務。我面對的資料是故事服務,故事有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);