下面的代碼是因應各項禮物的總數進行加總
再從總體中隨機抽取一份的寫法
如果想要變動抽取權重(機率) 則需要在sortedMap內增加或減少相對應項目數量
// 總體抽取樣本(禮物)
int totalWeight = 0;
// 創建Map表單NavigableMap<Integer, Integer> 再遍歷原List表單(List<GiftEntity>)
// 插入 Key及Value 到Map表單
// 再把每項樣本(禮物)細項總額加總 至 總體之中
NavigableMap<Integer, Integer> sortedMap = new TreeMap<>();
for(GiftEntity giftEntity : giftList) {
Integer gift_amount = giftEntity.getBalance();
totalWeight += gift_amount;
Integer giftId = giftEntity.getId();
sortedMap.put(totalWeight, giftId);
}
// 從 0 至 總體最大數中 隨機抽取一個值
Random random = new Random();
Double randomDouble = random.nextDouble() * totalWeight;
// 根據抽取結果(Key) 從Map表單中找到相對於List表單的值(Value)
Integer res_GiftID = sortedMap.ceilingEntry(randomDouble.intValue()).getValue();
// 創建新的Map表單再加入將最終抽取結果
Map<String, Integer> resultMap = new HashMap<>();
resultMap.put("giftID", res_GiftID);
如有任何疑問歡迎下方留言, 希望看完的碼友們點讚支持