抽奖工具类代码

import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;/*** @author : ffff* @date 2020/12/31 15:47*/
public class LotteryUtil {/*** 抽奖** @param orignalRates 原始的概率列表,保证顺序和实际物品对应* @return 物品的索引*/public static int lottery(List<Double> orignalRates) {if (orignalRates == null || orignalRates.isEmpty()) {return -1;}int size = orignalRates.size();// 计算总概率,这样可以保证不一定总概率是1double sumRate = 0d;for (double rate : orignalRates) {sumRate += rate;}// 计算每个物品在总概率的基础下的概率情况List<Double> sortOrignalRates = new ArrayList<Double>(size);double tempSumRate = 0d;for (double rate : orignalRates) {tempSumRate += rate;sortOrignalRates.add(tempSumRate / sumRate);}// 根据区块值来获取抽取到的物品索引double nextDouble = Math.random();sortOrignalRates.add(nextDouble);Collections.sort(sortOrignalRates);return sortOrignalRates.indexOf(nextDouble);}public static void main(String[] args) {List<String> cardNames = Arrays.asList("财", "源", "广", "进", "牛", "气", "冲", "天");List<Double> cardRatio = Arrays.asList(5D,15.5D,15.5D,15.5D,2D,15.5D,15.5D,15.5D);List<String> list = new ArrayList<>();for (int i = 0; i <10000 ; i++) {list.add(cardNames.get(LotteryUtil.lottery(cardRatio)));}Map<String, List<String>> collect = list.stream().collect(Collectors.groupingBy(item -> item));collect.forEach((k,v)->{System.out.println(k+":"+v.size());});}}

对你有帮助,点个赞哦。

java概率抽奖工具类,直接使用相关推荐

  1. 概率抽奖工具类(支持概率大于100抽奖)

    package choujiang;import java.util.ArrayList; import java.util.List; import java.util.Random;/*** 抽奖 ...

  2. Java封装OkHttp3工具类

    点击关注公众号,Java干货及时送达  作者:如漩涡 https://blog.csdn.net/m0_37701381 Java封装OkHttp3工具类,适用于Java后端开发者 说实在话,用过挺多 ...

  3. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

  4. java轻量级并行工具类_16 个超级实用的 Java 工具类

    原标题:16 个超级实用的 Java 工具类 源 /juejin 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名, ...

  5. java时间日期工具类_java日期处理工具类

    java日期处理工具类 import java.text.DecimalFormat; import java.text.ParsePosition; import java.text.SimpleD ...

  6. java 日期处理工具类_Java日期处理工具类DateUtils详解

    本文实例为大家分享了Java日期处理工具类DateUtils的具体代码,供大家参考,具体内容如下 import java.sql.Timestamp; import java.text.ParseEx ...

  7. java downloadfile_FileDownload.java:文件下载工具类

    FileDownload.java:文件下载工具类 2017-04-25·Mr.Xia 4489 次浏览 文件下载功能的工具类 JavaWeb工具类目录 [http://baike.xsoftlab. ...

  8. java.util.zip 用法,Java压缩文件工具类ZipUtil使用方法代码示例

    本文实例通过Java的Zip输入输出流实现压缩和解压文件,前一部分代码实现获取文件路径,压缩文件名的更改等,具体如下: package com.utility.zip; import java.io. ...

  9. java基于HuTool工具类ExcelWriter合并单元格

    ** java基于HuTool工具类ExcelWriter合并单元格 ** 1.基于HuTool工具类ExcelWriter合并单元格并且使用 jdk1.8 lambda表达式 效果如下: 用姓名和编 ...

最新文章

  1. %matplotlib inline的含义
  2. Python之旅.第九章.并发编程..
  3. 个人知识体系思维导图_高中数学知识点思维导图
  4. Nature:首个完全复现人眼的仿生眼问世,港科大造出半球形人工视网膜,感光性能超过人眼460倍...
  5. rhel7安装oracle11g 的配置和安装过程
  6. javascript --- 异步函数的顺序进行
  7. 设置tableView的分割线从最左端开始
  8. LINQ:进阶 - LINQ 标准查询操作概述
  9. UE4从4.15移植到4.16
  10. 产品经理必知必会的SQL
  11. c语言leg 10,Leg massaging device
  12. Xcode的编译/运行结果保存的路径
  13. SMbus和I2C异同, PMBUS
  14. mysql管理员_mysql怎么获得管理员权限??麻烦告诉我
  15. windows下的文件服务器监控
  16. telnet 回显 linux,telnet实现本地回显
  17. 谐振放大器工作点和阻抗
  18. 在网站上营销品牌故事的六种简单方法
  19. Flutter TV应用的开发尝试
  20. 《机器学习》阅读笔记(三)

热门文章

  1. 2023预制菜展/江西预制菜加工设备与包装设备展/方便食品展
  2. 自动回复html模板邮件,HTML邮件模板制作规范
  3. android多屏互动组件,史上最实用的多屏互动教程 PC投屏(镜像)安卓
  4. linux下安装绘图的包numpy,scipy,matplotlibm
  5. 首都经济贸易大学本科毕业论文答辩PPT模板
  6. 查看 centos 具体版本号
  7. Hadoop 3.2 环境搭建
  8. matlab 图像的灰度值翻转
  9. 题目:``N个人排成一圈,从第一个人开始报数,从1开始报,报到M的人出圈,剩下的人继续开始从1报数,直到所有的人都出圈为止。对于给定的N,M,求出所有人的出圈顺序
  10. [译] 用ps创建error水晶小图标