public class WeighTest {
public static void main(String[] args) {
List<Pair<Node,Integer>> myList=new ArrayList<>();
myList.add(new ImmutablePair<Node,Integer>(new Node("a"),100));
myList.add(new ImmutablePair<Node,Integer>(new Node("b"),10));
myList.add(new ImmutablePair<Node,Integer>(new Node("c"),30));
TreeMap<Double,Node> weightMap=new TreeMap<>();
for (int i = 0; i < myList.size(); i++) {
if(weightMap.isEmpty()){
weightMap.put(myList.get(i).getValue().doubleValue(),myList.get(i).getKey());
}else{
weightMap.put(myList.get(i).getValue().doubleValue()+weightMap.lastKey().doubleValue(),myList.get(i).getKey());
}
}
Map<String,Integer> countMap=new HashMap<>();
for(int i=0;i<10000;i++){
double randomWeight = weightMap.lastKey() * Math.random();
SortedMap<Double, Node> tailMap = weightMap.tailMap(randomWeight, false);
Node node= weightMap.get(tailMap.firstKey());
if(node.getName().equals("a")){
countMap.put("a",countMap.get("a")==null?1:countMap.get("a")+1);
}else if(node.getName().equals("b")){
countMap.put("b",countMap.get("b")==null?1:countMap.get("b")+1);
}else if(node.getName().equals("c")) {
countMap.put("c", countMap.get("c") == null ? 1 : countMap.get("c") + 1);
}
}
System.out.println("a====>"+countMap.get("a"));
System.out.println("b====>"+countMap.get("b"));
System.out.println("c====>"+countMap.get("c"));
}
}
class Node{
private String name;
public Node(String name){
this.name=name;
}
public String getName() {
return name;
}
}