需求:根据目标的权重,获取目标数据;本例:根据用户Id所占比重,按权重随机获取;可以根据实际需求,修改K的类型,获取所需;
package sl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* 需求 => 根据目标的权重,获取目标数据;
* 本例 => 根据用户Id所占比重,按权重随机获取;可以根据实际需求,修改K的类型;
* @param <K>
* @author panguijia
*/
public class AssignRule<K> {
/**
* 随机规则
*/
public K getRandomUserId( Map<K,Integer> rawMap){
Map<K, List<Integer>> idMapper=new HashMap<>();
int count=0;
for(K k:rawMap.keySet()){
List<Integer> numList=new ArrayList<>();
for(int i=0;i<rawMap.get(k);i++){
count++;
numList.add(count);
}
idMapper.put(k,numList); }
int max=count,min=1;
int rand = (int) (Math.random()*(max)+min);
for(K k:idMapper.keySet()){
for(int v:idMapper.get(k)){
if(v==rand){
return k;
}
}
}
return null;
} /**
* 验证分配规则有效性
* @param args
*/
public static void main(String[] args) {
/**
* key target
* val ratio
*/
Map<Integer,Integer> rawMap=new HashMap<>();
rawMap.put(1,1);
rawMap.put(2,2);
rawMap.put(3,3);
rawMap.put(4,4); Map<Integer,Integer> map=new HashMap<>();
map.put(1,0);
map.put(2,0);
map.put(3,0);
map.put(4,0);
//实例化,目标对象类型
AssignRule<Integer> assignRule=new AssignRule<>();
for(int i=0;i<10000000;i++){
for(int k:map.keySet()){
if(k==assignRule.getRandomUserId(rawMap)){
int v=map.get(k);
map.put(k,v+1);
}
}
}
for(int k:map.keySet()){
System.out.println(k+" = "+map.get(k));
}
}
}

验证结果

1 = 1001348
2 = 1998783
3 = 3000873
4 = 3997947 Process finished with exit code 0
												

Java 根据权重获取数据 基础 极简 准确率高的更多相关文章

  1. java读取excel获取数据写入到另外一个excel

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  2. java连接外部接口获取数据工具类

    package com.yqzj.util; import org.apache.log4j.LogManager;import org.apache.log4j.Logger; import jav ...

  3. EL表达式获取数据

    EL 全名为Expression Language. EL主要作用 获取数据: •EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数据.(某个web域 ...

  4. 【转】手摸手,带你用vue撸后台 系列四(vueAdmin 一个极简的后台基础模板)

    前言 做这个 vueAdmin-template 的主要原因是: vue-element-admin 这个项目的初衷是一个vue的管理后台集成方案,把平时用到的一些组件或者经验分享给大家,同时它也在不 ...

  5. Flutter实战视频-移动电商-08.Dio基础_伪造请求头获取数据

    08.Dio基础_伪造请求头获取数据 上节课代码清楚 重新编写HomePage这个动态组件 开始写请求的方法 请求数据 .但是由于我们没加请求的头 所以没有返回数据 451就是表示请求错错误 创建请求 ...

  6. .net通过WCF调用java发布的服务,获取数据

    功能描述 java作为后台,连接数据库获取数据,然后发布SOAP services,让.net平台通过WCF进行引用. 实现步骤 1.在项目特定文件夹下,右键->添加服务引用,输入服务的url地 ...

  7. java接口对接——别人调用我们接口获取数据

    java接口对接——别人调用我们接口获取数据,我们需要在我们系统中开发几个接口,给对方接口规范文档,包括访问我们的接口地址,以及入参名称和格式,还有我们的返回的状态的情况, 接口代码: package ...

  8. 使用C#利用cmd来调用java jar包获取其中的数据

    其实也很简单,就是在C#中构建一个Process,启动jar包,并且给jar包传递参数 因为我并没有怎么学过JAVA,所以只写了个很小的Demo,就是根据传入的参数获取对应的数据 以下是JAVA De ...

  9. Asky极简教程:零基础1小时学编程,已更新前8节

    Asky极简架构 开源Asky极简架构.超轻量级.高并发.水平扩展.微服务架构 <Asky极简教程:零基础1小时学编程>开源教程 零基础入门,从零开始全程演示,如何开发一个大型互联网系统, ...

随机推荐

  1. 抓住那只牛!Catch That Cow POJ-3278 BFS

    题目链接:Catch That Cow 题目大意 FJ丢了一头牛,FJ在数轴上位置为n的点,牛在数轴上位置为k的点.FJ一分钟能进行以下三种操作:前进一个单位,后退一个单位,或者传送到坐标为当前位置两 ...

  2. 多智能体系统(MAS)简介

    1.背景   自然界中大量个体聚集时往往能够形成协调.有序,甚至令人感到震撼的运动场景,比如天空中集体翱翔的庞大的鸟群.海洋中成群游动的鱼群,陆地上合作捕猎的狼群.这些群体现象所表现出的分布.协调.自 ...

  3. JavaScript学习记录

    js整理笔记 1.数据类型 2.基本语法 3.js运算符 4.条件语句 5.类型转换 6.函数 7.预编译 8.作用域 9.闭包 10.对象创建方法 11.this 12.dom操作 13.事件 14 ...

  4. Python-基于向量机SVM的文本分类

    项目代码见 Github: 1.算法介绍 2.代码所用数据 详情参见http://qwone.com/~jason/20Newsgroups/ 文件结构 ├─doc_classification.py ...

  5. 平行世界中的你还是你吗?--java中的==是否相等

    故事背景 <宇宙追缉令>是黄毅瑜执导的动作科幻类电影,由哥伦比亚三星公司出品,戴尔里·林多.李连杰.杰森·斯坦森领衔主演.影片于2001年11月2日在美国上映.该片讲述了邪恶尤兰,为了成为 ...

  6. AVR单片机教程——EasyElectronics Library v1.1手册

    索引: bit.h delay.h pin.h wave.h pwm.h led.h rgbw.h button.h switch.h 主要更新: 用枚举类型替换了大部分宏定义: 添加了wave.h. ...

  7. Redis与数据库数据一致性

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 可能谈到保持Redis与Mysql双库的数据一致性,可能很多人最先想到的方案就是读请求和写请求串行化,串到一个 ...

  8. 设计模式---结构型模式之适配器模式(Adapter Pattern)

    适配器模式定义 将一个类的接口,转换成客户期望的另外一个接口.适配器让原本接口不兼容的类可以合作无间. 适配器模式主要有两种类型:对象适配器和类适配器. 在详细解释这两种类型时,解释部分重要角色.生活 ...

  9. 关于MySQL的经典例题50道

    --1.学生表Student(S,Sname,Sage,Ssex) --S 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2.课程表 Course(C,Cname,T) - ...

  10. java中的Math.ceil、Math.floor和Math.round

    ceil意为天花板,指向上取整:floor意为地板,指向下取整:round指四舍五入 package com.company; public class Main { public static vo ...