传入抽奖集合对象获得随机的奖品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;//奖品权重 }