public static Map<String, Integer>publicMap = new LinkedHashMap<String,Integer>();
publicstatic void main(String[] args) { String str = "b|c|d|e|f|a|b|c|d|e|a|a";//从数据库循环累加标签
String[] ss = str.split("\\|"); System.out.println(getTopMap(ss, 10).toString()); }
privatestatic Map<String, Integer>getTopMap(String[] strs, int topCount) { Map<String, Integer> map = newLinkedHashMap<String,Integer>(); for (String s : strs){ //存到Map中 key:名字 value:次数 if (publicMap.containsKey(s)) { //包含则 value+1 publicMap.put(s, publicMap.get(s) + 1); } else { publicMap.put(s, 1); } }
String setStr = publicMap.keySet().toString(); String[] keys = setStr.substring(1,setStr.lastIndexOf("]")).split(",");
sortKeyByValues(keys);//按照value对key进行最值排序
int count = topCount > keys.length ? keys.length :topCount;
for (int i = 0; i < count; i++) { map.put(keys[i].trim(), publicMap.get(keys[i].trim())); } return map; } //按照value对key进行最值排序
privatestatic void sortKeyByValues(String[] keys) { boolean isSwap = true; String temp; String key1; String key2; int value1; int value2;
for (int i = 0; i < keys.length&& isSwap; i++) { isSwap = false; for (int j = 0; j < keys.length - 1; j++) { key1 = keys[j + 1].trim(); key2 = keys[j].trim(); value1 = Integer.parseInt(publicMap.get(key1).toString()); value2 = Integer.parseInt(publicMap.get(key2).toString()); if (value1 > value2) { temp = keys[j].trim(); keys[j] = keys[j + 1].trim(); keys[j + 1] = temp; isSwap = true; } } } }