LinkedHashMap<LogoHashObject, MutableInteger> counts =
new LinkedHashMap<LogoHashObject, MutableInteger>();
LogoList list = argEvalList(context, 0);
for (Iterator<Object> it = list.iterator(); it.hasNext();) {
Object srcElt = it.next();
LogoHashObject logoElt = new LogoHashObject(srcElt);
if (counts.containsKey(logoElt)) {
MutableInteger i = counts.get(logoElt);
i.value_$eq(i.value() + 1);
} else {
counts.put(logoElt, new MutableInteger(1));
}
}
Iterator<LogoHashObject> keys = counts.keySet().iterator();
int currMaxCount = 0;
while (keys.hasNext()) {
LogoHashObject currKey = keys.next();
int currVal = counts.get(currKey).value();
if (currVal > currMaxCount) {
currMaxCount = currVal;
}
}
keys = counts.keySet().iterator();
LogoListBuilder modes = new LogoListBuilder();
while (keys.hasNext()) {
LogoHashObject currKey = keys.next();
int currVal = counts.get(currKey).value();
if (currVal == currMaxCount) {
modes.add(currKey.getSourceObject());
}
}
return modes.toLogoList();
}