Best solution to your problem is to create a nonuniform probabilistic value list. Then randomly pick a value from that list. For example:
If we have a list like below:
{5 , 5 , 5 , 5 , 10 , 10 , 10 , 20, 20 ,30}
Our probabilities will be like that;
5 => 40% --- 10 => 30% --- 20 => 20% --- 30 => 10%
You can achieve that solution with the simple method below:
private static int generateStat()
{
ArrayList<Integer> stats = new ArrayList<Integer>();
//first parameter is probability and second is the value
stats.addAll(Collections.nCopies(30, (int)(Math.random()*30)));
stats.addAll(Collections.nCopies(45, (int)(Math.random()*20)+30));
stats.addAll(Collections.nCopies(20, (int)(Math.random()*25)+50));
stats.addAll(Collections.nCopies(5, (int)(Math.random()*25)+75));
return stats.get((int)(Math.random()*100));
}