1. 程式人生 > 實用技巧 >Map集合排序

Map集合排序

public class MapOrder {

    public static void main(String[] args) {
        HashMap<String,Integer> hashMap = new HashMap<String,Integer>();
        hashMap.put("d",11);
        hashMap.put("k",5);
        hashMap.put("l",16);
        hashMap.put("p",7);

        /*Map<String, Integer> result = sortByValue(hashMap,false);

        List<String> list = result.entrySet().stream().map(entry -> entry.getKey())
                .collect(Collectors.toList());

        list.stream().forEach(string ->{
            System.out.println(string);
        });
*/ //sortByValue(hashMap); sortTreeMap(); } /** * ******************************************************************************************************** * java8新特性:對map集合排序,根據key或者value操作排序(升序、降序) * ********************************************************************************************************
*/ /** * 根據map的key排序 * * @param map 待排序的map * @param isDesc 是否降序,true:降序,false:升序 * @return 排序好的map * @author zero 2019/04/08 */ public static <String extends Comparable<? super String>,Integer> Map<String,Integer> sortByKey(Map<String,Integer> map, boolean
isDesc) { Map<String,Integer> result = Maps.newLinkedHashMap(); if (isDesc) { map.entrySet().stream().sorted(Map.Entry.<String,Integer>comparingByKey().reversed()) .forEachOrdered(e -> result.put(e.getKey(), e.getValue())); } else { map.entrySet().stream().sorted(Map.Entry.<String,Integer>comparingByKey()) .forEachOrdered(e -> result.put(e.getKey(), e.getValue())); } return result; } /** * 根據map的value排序 * * @param map 待排序的map * @param isDesc 是否降序,true:降序,false:升序 * @return 排序好的map * @author zero 2019/04/08 */ public static <String, Integer extends Comparable<? super Integer>> Map<String, Integer> sortByValue(Map<String, Integer> map, boolean isDesc) { Map<String, Integer> result = Maps.newLinkedHashMap(); if (isDesc) { map.entrySet().stream().sorted(Map.Entry.<String, Integer>comparingByValue().reversed()) .forEachOrdered(e -> result.put(e.getKey(), e.getValue())); } else { map.entrySet().stream().sorted(Map.Entry.<String, Integer>comparingByValue()) .forEachOrdered(e -> result.put(e.getKey(), e.getValue())); } return result; } /** * ******************************************************************************************************** * 傳統方法:對map集合排序,根據key或者value操作排序(升序、降序) * ******************************************************************************************************** */ //HashMap public static void sortByValue(Map<String,Integer> map){ List<Map.Entry<String,Integer>> list = new ArrayList<>(map.entrySet()); Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { @Override public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return o1.getValue().compareTo(o2.getValue()); } }); for(Map.Entry<String,Integer> mapping:list){ System.out.println(mapping.getKey()+":"+mapping.getValue()); } } /** *TreeMap:能夠把它儲存的記錄根據key排序,預設是按升序排序,也可以指定排序的比較器,當用Iterator 遍歷TreeMap時, *得到的記錄是排過序的。TreeMap不允許key的值為null。非同步的。 */ public static void sortTreeMap(){ Map<String,Integer> treeMap = new TreeMap<>( new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } } ); treeMap.put("r",11); treeMap.put("b",5); treeMap.put("a",16); treeMap.put("p",7); //不用迭代器遍歷 System.out.println("不用迭代器遍歷"); treeMap.entrySet().stream().forEach(entry ->{ System.out.println(entry.getKey() + "---->" + entry.getValue()); }); //用迭代器遍歷 System.out.println("用迭代器遍歷"); Iterator<Map.Entry<String,Integer>> iterator = treeMap.entrySet().iterator(); while (iterator.hasNext()){ Map.Entry<String,Integer> entry = iterator.next(); System.out.println(entry.getKey() + "---->" + entry.getValue()); } } }