Java实现简单的权重抽奖
标签搜索
侧边栏壁纸
  • 累计撰写 8 篇文章
  • 累计收到 3 条评论

Java实现简单的权重抽奖

xuchuanwei
2022-11-16 / 0 评论 / 34 阅读 / 正在检测是否收录...
    /**
     * 根据权重获取奖励
     * 
     * @param awardMap
     * @return key:奖励 value:权重
     * @param <T>
     */
    public static <T> T getRandomValue(Map<T, Integer> awardMap) {
        // 获取权重和
        int totalWeight = awardMap.values().stream().mapToInt(Integer::intValue).sum();
        // 生成一个随机数
        int randomNum = new Random().nextInt(totalWeight);
        int prev = 0;
        for (Map.Entry<T, Integer> entry : awardMap.entrySet()) {
            if (randomNum < prev + entry.getValue()) {
                return entry.getKey();
            }
            prev += entry.getValue();
        }
        return null;
    }

经测试,运行100w次仅耗时121毫秒!
lgs26kpn.png

0

评论 (0)

取消