@Override public WPObject getObject() { if (weightedObjects == null) { weightedObjects = new TreeMap<Integer, WPObject>(); totalObjectWeight = 0; for (WPObject object : objects) { int frequency = object.getAttribute(ATTRIBUTE_FREQUENCY, 100); totalObjectWeight += frequency; weightedObjects.put(totalObjectWeight, object); } } return weightedObjects.tailMap(random.nextInt(totalObjectWeight)).values().iterator().next(); }