001/* 002# Licensed Materials - Property of IBM 003# Copyright IBM Corp. 2015 004 */ 005package twitter; 006 007import java.util.ArrayList; 008import java.util.Collections; 009import java.util.Comparator; 010import java.util.HashMap; 011import java.util.List; 012import java.util.Map.Entry; 013 014/** 015 * A container for a hashmap that keeps the top ten of whatever is in the map. 016 */ 017public class Trender { 018 // Overall hashmap for hashtags -- maintains the count for each hashtag 019 private HashMap<String, Integer> hmap = new HashMap<String, Integer>(); 020 021 public HashMap<String, Integer> getMap() { 022 return hmap; 023 } 024 025 /* 026 * Adds a hashtag to the table of hashtags, increasing its count. 027 */ 028 public void add(String s) { 029 Integer val; 030 031 // Insert the hashtag into the map. 032 if (!hmap.containsKey(s)) { 033 val = 1; 034 hmap.put(s, val); 035 } else { 036 val = hmap.get(s) + 1; 037 hmap.put(s, val); 038 } 039 } 040 041 /** 042 * Get a hashMap element 043 * 044 * @param s 045 * @return an element of the hashmap 046 */ 047 public Integer get(String s) { 048 return hmap.get(s); 049 } 050 051 /** 052 * Gets the top ten most frequent hashtags as a list. 053 * 054 * @return A ListContainer containing the top ten most frequent hashtags. 055 */ 056 public List<HashTagCount> getTopTen() { 057 ArrayList<HashTagCount> topTen = new ArrayList<HashTagCount>(); 058 059 // String[] topTen= new String[10]; 060 Integer minValue = 0; 061 for (Entry<String, Integer> eset : hmap.entrySet()) { 062 if (eset.getValue() < minValue) { 063 continue; 064 } 065 if (topTen.size() > 10) { 066 topTen.remove(0); 067 } 068 HashTagCount htc = new HashTagCount(eset.getKey(), eset.getValue()); 069 int idx = Collections.binarySearch(topTen, htc, 070 new Comparator<HashTagCount>() { 071 072 @Override 073 public int compare(HashTagCount o1, HashTagCount o2) { 074 if (o1.getCount() > o2.getCount()) 075 return 1; 076 else if (o1.getCount().equals(o2.getCount())) 077 return 0; 078 else 079 return -1; 080 } 081 }); 082 if (idx < 0) 083 idx = (-1 * idx) - 1; 084 topTen.add(idx, htc); 085 minValue = topTen.get(0).getCount(); 086 } 087 // Possible for the list to have 11 items 088 if (topTen.size() > 10) 089 topTen.remove(0); 090 return topTen; 091 } 092 093}