zoukankan      html  css  js  c++  java
  • Java 8 – Map排序

    前提

    Map是Java中最常用的集合类之一,这里整理了关于HashMap的排序 (关于List的排序,请查看Collections.sort()的doc或源码)。

    将无序的HashMap借助Stream整理成有序的LinkedHashMap。

     示例

    1.根据key排序:

     1 import java.util.HashMap;
     2 import java.util.LinkedHashMap;
     3 import java.util.Map;
     4 
     5 public class SortByKeyExample {
     6 
     7     public static void main(String[] argv) {
     8 
     9         Map<String, Integer> unsortMap = new HashMap<>();
    10         unsortMap.put("z", 10);
    11         unsortMap.put("b", 5);
    12         unsortMap.put("a", 6);
    13         unsortMap.put("c", 20);
    14         unsortMap.put("d", 1);
    15         unsortMap.put("e", 7);
    16         unsortMap.put("y", 8);
    17         unsortMap.put("n", 99);
    18         unsortMap.put("j", 50);
    19         unsortMap.put("m", 2);
    20         unsortMap.put("f", 9);
    21 
    22         System.out.println("Original...");
    23         System.out.println(unsortMap);
    24 
    25         Map<String, Integer> result = new LinkedHashMap<>();
    26 
    27         //sort by key, a,b,c..., and put it into the "result" map
    28         unsortMap.entrySet().stream()
    29                 .sorted(Map.Entry.comparingByKey())
    30                 .forEachOrdered(x -> result.put(x.getKey(), x.getValue()));
    31 
    32         System.out.println("Sorted...");
    33         System.out.println(result);
    34 
    35     }
    36 
    37 }

     结果:

      

    2.根据value排序:

     1 import java.util.HashMap;
     2 import java.util.LinkedHashMap;
     3 import java.util.Map;
     4 
     5 public class SortByValueExample {
     6 
     7     public static void main(String[] argv) {
     8 
     9         Map<String, Integer> unsortMap = new HashMap<>();
    10         unsortMap.put("z", 10);
    11         unsortMap.put("b", 5);
    12         unsortMap.put("a", 6);
    13         unsortMap.put("c", 20);
    14         unsortMap.put("d", 1);
    15         unsortMap.put("e", 7);
    16         unsortMap.put("y", 8);
    17         unsortMap.put("n", 99);
    18         unsortMap.put("j", 50);
    19         unsortMap.put("m", 2);
    20         unsortMap.put("f", 9);
    21 
    22         System.out.println("Original...");
    23         System.out.println(unsortMap);
    24 
    25         Map<String, Integer> result = new LinkedHashMap<>();
    26 
    27         //sort by value, and reserve, 10,9,8,7,6...
    28         unsortMap.entrySet().stream()
    29                 .sorted(Map.Entry.<String, Integer>comparingByValue().reversed())  // reversed倒序,不指定类型,会默认为<java.util.Map.Entry<java.lang.Object,V>>
    30                 .forEachOrdered(x -> result.put(x.getKey(), x.getValue()));
    31 
    32         System.out.println("Sorted...");
    33         System.out.println(result);
    34 
    35     }
    36 
    37 }

     结果:

      

    补充一张Map的类图:

    LinkedHashMap 是 Map 接口的哈希表和链接列表实现。

    LinkedHashMap 实现与 HashMap 的不同之处在于,LinkedHashMap 维护着一个运行于所有条目的双重链接列表,此链接列表定义了迭代顺序。

     参考:

  • 相关阅读:
    【五】服务熔断、降级 —— Hystrix(豪猪)
    32. Springboot 系列(八)动态Banner与图片转字符图案的手动实现
    31.【微服务架构】SpringCloud之Feign(五)
    新SQL temp
    lombok踩坑与思考
    lombok注解介绍
    叉乘实现角色和敌人的位置判断(左上,左下,右上,右下)
    2维,3维向量单位化
    2个2D向量计算交点的夹角和补角
    Unity编辑器-创建单独编辑框,折叠框,提示框
  • 原文地址:https://www.cnblogs.com/yucfeng/p/8794608.html
Copyright © 2011-2022 走看看