/*
# Licensed Materials - Property of IBM
# Copyright IBM Corp. 2015
*/
package twitter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
/**
* A container for a hashmap that keeps the top ten of whatever is in the map.
*/
public class Trender {
// Overall hashmap for hashtags -- maintains the count for each hashtag
private HashMap<String, Integer> hmap = new HashMap<String, Integer>();
public HashMap<String, Integer> getMap() {
return hmap;
}
/*
* Adds a hashtag to the table of hashtags, increasing its count.
*/
public void add(String s) {
Integer val;
// Insert the hashtag into the map.
if (!hmap.containsKey(s)) {
val = 1;
hmap.put(s, val);
} else {
val = hmap.get(s) + 1;
hmap.put(s, val);
}
}
/**
* Get a hashMap element
*
* @param s
* @return an element of the hashmap
*/
public Integer get(String s) {
return hmap.get(s);
}
/**
* Gets the top ten most frequent hashtags as a list.
*
* @return A ListContainer containing the top ten most frequent hashtags.
*/
public List<HashTagCount> getTopTen() {
ArrayList<HashTagCount> topTen = new ArrayList<HashTagCount>();
// String[] topTen= new String[10];
Integer minValue = 0;
for (Entry<String, Integer> eset : hmap.entrySet()) {
if (eset.getValue() < minValue) {
continue;
}
if (topTen.size() > 10) {
topTen.remove(0);
}
HashTagCount htc = new HashTagCount(eset.getKey(), eset.getValue());
int idx = Collections.binarySearch(topTen, htc,
new Comparator<HashTagCount>() {
@Override
public int compare(HashTagCount o1, HashTagCount o2) {
if (o1.getCount() > o2.getCount())
return 1;
else if (o1.getCount().equals(o2.getCount()))
return 0;
else
return -1;
}
});
if (idx < 0)
idx = (-1 * idx) - 1;
topTen.add(idx, htc);
minValue = topTen.get(0).getCount();
}
// Possible for the list to have 11 items
if (topTen.size() > 10)
topTen.remove(0);
return topTen;
}
}