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;
}
}
}
}