标签:dna stream rac return 随机 ESS 包装 ide his
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.ThreadLocalRandom;
/**
*
* @author:linxu
* @Date:2020-7-24 00:09:54
*/
public class WeightRandomTemplate {
public static void main(String[] args) {
List rewardWraps = new ArrayList();
rewardWraps.add(new RewardWrap(12881,"一等奖",1,1, 10));
rewardWraps.add(new RewardWrap(12882,"二等奖",1,2, 30));
rewardWraps.add(new RewardWrap(12883,"三等奖",1,3, 50));
//默认奖励,如果抽不到奖,默认抽中安慰奖【参与奖】
RewardWrap rewardWrap =new RewardWrap(12884,"安慰奖",1,4, 60);
rewardWraps.add(rewardWrap);
WeightRandom weightRandom = new WeightRandom(rewardWraps, rewardWrap);
//模拟抽奖二十次
for (int i = 0; i ) {
RewardWrap rewardWrapRandom = (RewardWrap) weightRandom.randomWeightWrap();
System.out.println(rewardWrapRandom.toString());
}
}
//测试实现类
public static class RewardWrap extends DefaultWeightWrap {
private int rewardId;//奖励id
private String rewardName;//奖励名称
private int rewardValue;//数量
private int rank;//奖励排名1等奖,2等奖
public RewardWrap(int rewardId, String rewardName, int rewardValue, int rank,int weight) {
this.rewardName = rewardName;
this.rewardValue = rewardValue;
this.rewardId = rewardId;
this.rank = rank;
this.weight=weight;
}
@Override
public String toString() {
return "Reward{" +
"rewardId=" + rewardId +
", rewardName=‘" + rewardName + ‘\‘‘ +
", rewardValue=" + rewardValue +
", rank=" + rank +
‘}‘;
}
}
public static class WeightRandomextends DefaultWeightWrap> {
private List content;//目标集合数据
private T defaultResult;//默认返回值【参与奖励】
public WeightRandom(List content, T defaultResult) {
this.content = content;
this.defaultResult = defaultResult;
}
public T randomWeightWrap() {
int s = content.stream().mapToInt(DefaultWeightWrap::getWeight).sum();
int r = ThreadLocalRandom.current().nextInt(s);
Optional optional = content.stream().filter(t -> { int result = r - t.getWeight();return result ; }).findFirst();
return optional.orElse(defaultResult);
}
}
//权重包装基类
public static abstract class DefaultWeightWrap {
public int weight;//权重
public int getWeight() {
return weight;
}
}
}
测试结果:
Reward{rewardId=12884, rewardName=‘安慰奖‘, rewardValue=1, rank=4}
Reward{rewardId=12882, rewardName=‘二等奖‘, rewardValue=1, rank=2}
Reward{rewardId=12884, rewardName=‘安慰奖‘, rewardValue=1, rank=4}
Reward{rewardId=12881, rewardName=‘一等奖‘, rewardValue=1, rank=1}
Reward{rewardId=12884, rewardName=‘安慰奖‘, rewardValue=1, rank=4}
Reward{rewardId=12883, rewardName=‘三等奖‘, rewardValue=1, rank=3}
Reward{rewardId=12884, rewardName=‘安慰奖‘, rewardValue=1, rank=4}
Reward{rewardId=12884, rewardName=‘安慰奖‘, rewardValue=1, rank=4}
Reward{rewardId=12884, rewardName=‘安慰奖‘, rewardValue=1, rank=4}
Reward{rewardId=12884, rewardName=‘安慰奖‘, rewardValue=1, rank=4}
Reward{rewardId=12884, rewardName=‘安慰奖‘, rewardValue=1, rank=4}
Reward{rewardId=12881, rewardName=‘一等奖‘, rewardValue=1, rank=1}
Reward{rewardId=12884, rewardName=‘安慰奖‘, rewardValue=1, rank=4}
Reward{rewardId=12882, rewardName=‘二等奖‘, rewardValue=1, rank=2}
Reward{rewardId=12884, rewardName=‘安慰奖‘, rewardValue=1, rank=4}
Reward{rewardId=12883, rewardName=‘三等奖‘, rewardValue=1, rank=3}
Reward{rewardId=12884, rewardName=‘安慰奖‘, rewardValue=1, rank=4}
Reward{rewardId=12883, rewardName=‘三等奖‘, rewardValue=1, rank=3}
Reward{rewardId=12884, rewardName=‘安慰奖‘, rewardValue=1, rank=4}
Reward{rewardId=12884, rewardName=‘安慰奖‘, rewardValue=1, rank=4}
Process finished with exit code 0
Java实现按照权重随机抽奖案例
标签:dna stream rac return 随机 ESS 包装 ide his
原文地址:https://www.cnblogs.com/mature1021/p/13369721.html