- //AdvertPushDTO 为业务对象, getWeight() 获取权重值
- private AdvertPushDTO weightRamdom(List<AdvertPushDTO> list){
- int weightSum = 0;
- for (AdvertPushDTO dto : list) {
- weightSum += dto.getWeight();
- }
- if (weightSum <= 0) {
- System.err.println("错误: weightSum=" + weightSum);
- return null;
- }
- Integer n = new Random().nextInt(weightSum); // n 的值为 [0, weightSum)
- Integer m = 0;
- for (AdvertPushDTO dto : list) {
- if (m <= n && n < m + dto.getWeight()) {
- return dto; // 返回结果
- }
- m += dto.getWeight();
- }
- return null;
- }
来源: http://www.bubuko.com/infodetail-3295244.html