/**
* * @Description: 带权随机
* * @param
* * @return
* * @throws
* * @author R.Z
*/
private int randomWithWeight(Map<Integer, Integer> resultMap) {
List<Integer> indexList = new ArrayList<>(resultMap.keySet());
Collections.sort(indexList);
List<Integer> valuelist = new ArrayList<>(resultMap.values());
ArrayList<Integer> arealist = new ArrayList<>();
int count = 0;
for (Integer num : valuelist) {
count += num;
arealist.add(count);
}
int random = RandomUtils.nextInt(count);
for (int i = 0; i < arealist.size(); i++) {
if (random <= arealist.get(i)) {
return indexList.get(i);
}
}
return -1;
}
}
自用算法,高效不是很高,但是够用,,, 需要一个 Map< 值,权 >