传入抽奖集合对象获得随机的奖品id
public int getPrizeIndex(List<Prize> prizes) {
int random = -1;
try {
//计算总权重
double sumWeight = 0;
for (Prize p : prizes) {
sumWeight += p.getPrizeWeight();
}
//产生随机数
double randomNumber;
randomNumber =new SecureRandom().nextDouble();
//根据随机数在所有奖品分布的区域并确定所抽奖品
double d1 = 0;
double d2 = 0;
for (int i = 0; i < prizes.size(); i++) {
if (sumWeight != 0){
d2 += Double.parseDouble(String.valueOf(prizes.get(i).getPrizeWeight())) / sumWeight;
}
if (i == 0) {
d1 = 0;
} else {
if (sumWeight != 0) {
d1 += Double.parseDouble(String.valueOf(prizes.get(i - 1).getPrizeWeight())) / sumWeight;
}
}
if (randomNumber >= d1 && randomNumber <= d2) {
random = i;
break;
}
}
} catch (Exception e) {
logger.error("生成抽奖随机数出错,出错原因:" + e.getMessage());
}
return random;
}
@Data
public class Prize {
private Integer id;//奖品id
private Integer prizeWeight;//奖品权重
}