final TreeSet<IdCount> topList = new TreeSet<IdCount>(new Comparator<IdCount>() {
public int compare(IdCount a, IdCount b) {
return (a.count > b.count ? -1 : (a.count == b.count ? (a.id < b.id ? -1 : (a.id == b.id ? 0 : 1)) : 1)); // Descending order
}
});
IdCount least = null;
for(int i=0; i<uniqueCount; i++) {
if (topList.size() < topN) {
topList.add(new IdCount(ids[i], counts[i]));
least = topList.last();
} else {
if (counts[i] > least.count) {
topList.remove(least);
topList.add(new IdCount(ids[i], counts[i]));
least = topList.last();
}
}
if (topList.size() > topN) throw new RuntimeException("Top list too big: " + topList.size());