import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class sortMapWithValue {
    public static void main(String[] args) {
        Map<String, Number> map = new HashMap<String, Number>();
        map.put("aa", 333);
        map.put("bb", 666);
        map.put("cc", 11);
        map.put("dd", 565);
        map.put("ee", 234);
        map.put("ff", 1);
        //根据map的值排序
        Map<String, Number> newMap = sortMapWithValue.sortMapByValue(map);
        //获取map的前多少条记录
        Map<String, Number> jieshouMap = sortMapWithValue.getTopMapNumber(newMap, 3);
        System.out.println(jieshouMap);
        System.out.println(newMap);
    }
    // map结合根据value排序
    public static Map<String, Number> sortMapByValue(Map<String, Number> oriMap) {
        Map<String, Number> sortedMap = new LinkedHashMap<String, Number>();
        if (oriMap != null && !oriMap.isEmpty()) {
            List<Map.Entry<String, Number>> entryList = new ArrayList<Map.Entry<String, Number>>(
                    oriMap.entrySet());
            Collections.sort(entryList,
                    new Comparator<Map.Entry<String, Number>>() {
                        public int compare(Entry<String, Number> entry1,
                                Entry<String, Number> entry2) {
                            int value1 = 0, value2 = 0;
                            try {
                                value1 = getInt(entry1.getValue());
                                value2 = getInt(entry2.getValue());
                            } catch (NumberFormatException e) {
                                value1 = 0;
                                value2 = 0;
                            }
                            return value2 - value1;
                        }
                    });
            Iterator<Map.Entry<String, Number>> iter = entryList.iterator();
            Map.Entry<String, Number> tmpEntry = null;
            while (iter.hasNext()) {
                tmpEntry = iter.next();
                sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());
            }
        }
        return sortedMap;
    }
    private static int getInt(Number str) {
        int i = 0;
        String s = str.toString();
        try {
            Pattern p = Pattern.compile("^\\d+");
            Matcher m = p.matcher(s);
            if (m.find()) {
                i = Integer.valueOf(m.group());
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return i;
    }
    // 取map前num条
    public static Map<String, Number> getTopMapNumber(Map<String, Number> map,
            int num) {
        // 保存需要返回的数据
        Map<String, Number> maxMap = new HashMap<String, Number>();
        List<Map.Entry<String, Number>> list = new LinkedList<Map.Entry<String, Number>>();
        list.addAll(map.entrySet());
        int flag = 0;
        for (Iterator<Map.Entry<String, Number>> ite = list.iterator(); ite
                .hasNext();) {
            Map.Entry<String, Number> map1 = ite.next();
            if (flag < num) {
                maxMap.put(map1.getKey(), map1.getValue());
                flag++;
            } else {
                break;
            }
        }
        return maxMap;
    }
}