zoukankan      html  css  js  c++  java
  • Java.util.Map排序输出

    在java的众多Map实现中,Map基本上是不能保证顺序的(LinkedHashMap可以保证插入顺序或者访问顺序,TreeMap默认按照key升序但可以自定义Comparator),在开发过程中当数据量不是很大的时候,使用HashMap去统计数据非常方便,但是为了使得输出结果更美观一些,我们需要按某种自定义顺序输出。

    下面介绍一种排序Map的方法,使用起来很方便,如下面代码:

     1     private static class ValueComparator implements Comparator<Map.Entry<String, Integer>> {
     2 
     3         @Override
     4         public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
     5             return o1.getValue() - o2.getValue();
     6         }
     7     }
     8 
     9     public static void test3() {
    10         Map<String, Integer> map = new HashMap<>();
    11         map.put("a", 9);
    12         map.put("b", 8);
    13         map.put("c", 7);
    14         map.put("d", 6);
    15         map.put("e", 5);
    16         map.put("f", 4);
    17         map.put("g", 3);
    18         map.put("h", 2);
    19         map.put("i", 1);
    20 
    21         List<Map.Entry<String, Integer>> mapList = new ArrayList<>();
    22         mapList.addAll(map.entrySet());
    23         for (Map.Entry<String, Integer> entry : mapList) {
    24             System.out.println(entry.getKey() + " : " + entry.getValue());
    25         }
    26         System.out.println("
    ");
    27 
    28         ValueComparator valueComparator = new ValueComparator();
    29         Collections.sort(mapList, valueComparator);
    30         for (Map.Entry<String, Integer> entry : mapList) {
    31             System.out.println(entry.getKey() + " : " + entry.getValue());
    32         }
    33         System.out.println("
    ");
    34     }

    在上面代码中我们先定义一个Comparator,然后将Map转换为List,通过Collections.sort(mapList, valueComparator)方法进行排序输出。

    这种写法还可以简化一下,Comparator使用的时候才定义。

     1         Comparator<Map.Entry<String, Integer>> comparator = new Comparator<Map.Entry<String, Integer>>() {
     2             @Override
     3             public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
     4                 return o1.getKey().compareToIgnoreCase(o2.getKey());
     5             }
     6         };
     7 
     8         Collections.sort(mapList, comparator);
     9         for (Map.Entry<String, Integer> entry : mapList) {
    10             System.out.println(entry.getKey() + " : " + entry.getValue());
    11         }

    使用Java 8之后还可以使用lambda表达式简化一下代码

    1         Comparator<Map.Entry<String, Integer>> comparator = (o1, o2) -> o1.getKey().compareToIgnoreCase(o2.getKey());
    2 
    3         Collections.sort(mapList, comparator);
    4         for (Map.Entry<String, Integer> entry : mapList) {
    5             System.out.println(entry.getKey() + " : " + entry.getValue());
    6         }
  • 相关阅读:
    Spring 中的事务操作、注解、以及 XML 配置
    ..OBJLED.axf: Error: L6218E: Undefined symbol EXTI_Init (referred from exti.o). 错误修改
    ADC分辨率
    单片机ADC检测4-20mA电路,以及计算方法
    STM32速度---网页讲解
    转载电子发烧友网---STM32的IO口灌入电流和输出驱动电流
    精密电阻性能
    ..OBJCAN.axf: Error: L6411E: No compatible library exists with a definition of startup symbol __main.
    asp.net---jquery--ajax 实现滚动条滚动到底部分页显示
    柱状图dataLabels 文字格式 以及如何获取柱子的name(名称)属性
  • 原文地址:https://www.cnblogs.com/snowater/p/8125657.html
Copyright © 2011-2022 走看看