/**
* 概率选择
*
* @param keyChanceMap
* key为奖品,value为中奖的概率,是去掉%的数字
* @return 被选中的key。未选中返回null
*/
public static <K> K chanceSelect(Map<K, Integer> keyChanceMap) {
if (keyChanceMap == null || keyChanceMap.size() == 0)
return null;
Integer sum = 0;
for (Integer value : keyChanceMap.values()) {
sum += value;
}
// 从1开始
Integer rand = new Random().nextInt(sum) + 1;
int rate = 0;
for (Map.Entry<K, Integer> entry : keyChanceMap.entrySet()) {
rate += entry.getValue();
// 选中
if (rand <= rate) {
return entry.getKey();
}
}
return null;
}
按一定概率获得奖品
最新推荐文章于 2021-11-24 11:16:32 发布