zoukankan      html  css  js  c++  java
  • 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());
            }
    
        }
    }
  • 相关阅读:
    计算机英语
    NSQ学习记录
    Java学习记录-注解
    VS插件开发

    双链表
    顺序表
    顺序队列
    顺序栈

  • 原文地址:https://www.cnblogs.com/talkingcat/p/13710849.html
Copyright © 2011-2022 走看看