前言
先大概描述下 hutool 工具是如何根据权重进行抽取,后面再结合源码进行讲解。
假设有如下奖品以及对应的权重:
奖品名称 | 权重 | 奖品数量 |
---|---|---|
谢谢参与 | 0.7 | 60 |
10积分 | 0.45 | 50 |
IPhone 14 | 0.05 | 5 |
Mac Book Air | 0.01 | 1 |
需要注意 谢谢参与 也算是一种奖品,因为它也能被抽中。
hutool 的工具会根据 总权重 * 随机数 得到一个随机的权重,然后取第一个大于等于该 随机权重 的奖品作为抽中的结果。
说白了就是将奖品按如下分割出自己的区域,然后随机生成一个在范围内的数,看这个数落在哪一个区间上面。
代码实现
导入 Maven 依赖,或者自行前往 Hutool 官网下载 jar 包
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.11</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
抽奖代码实现
/**
* 抽奖实现
*
* @author thai
*/
public class LuckyDraw {
public static void main(String[] args) {
List<Prize> prizes = List.of(
new Prize("谢谢参与", 60, 0.7),
new Prize