zoukankan      html  css  js  c++  java
  • map数据按照list排序

    • 简介 (Introduction):

      • 背景
        需要对字段进行排序,但是,一个字段的结果存在一个map中,一个存在list中,需要让map的数组,按照list的顺序进行排序

      • 结构图
        list顺序

         1 [
         2     {
         3         "fieldKey":"关键字",
         4         "alias":"ID",
         5         "owner":"mysql",
         6         "field":"ID",
         7         "fieldNumber":1
         8     },
         9     {
        10         "fieldKey":"名称",
        11         "alias":"CHNAME",
        12         "owner":"mysql",
        13         "field":"NAME",
        14         "fieldNumber":2
        15     },
        16     {
        17         "fieldKey":"是否删除",
        18         "alias":"DELETED",
        19         "owner":"mysql",
        20         "field":"ISDELETED",
        21         "fieldNumber":3
        22     },
        23     {
        24         "fieldKey":"序号",
        25         "alias":"ORDERNO",
        26         "owner":"mysql",
        27         "field":"ORDERNO",
        28         "fieldNumber":4
        29     }
        30 ]
        View Code

        map顺序

         1 {
         2     "ORDERNO":{
         3         "fieldKey":"序号",
         4         "alias":"ORDERNO",
         5         "owner":"mysql",
         6         "field":"ORDERNO",
         7         "fieldNumber":4
         8     },
         9     "NAME":{
        10         "fieldKey":"名称",
        11         "alias":"CHNAME",
        12         "owner":"mysql",
        13         "field":"NAME",
        14         "fieldNumber":2
        15     },
        16     "ISDELETED":{
        17         "fieldKey":"是否删除",
        18         "alias":"DELETED",
        19         "owner":"mysql",
        20         "field":"ISDELETED",
        21         "fieldNumber":3
        22     },
        23     "ID":{
        24         "fieldKey":"关键字",
        25         "alias":"ID",
        26         "owner":"mysql",
        27         "field":"ID",
        28         "fieldNumber":1
        29     }
        30 }
        View Code
    • 核心

    • 快速上手(Getting Started)

         模型

          list模型:
     1 /**
     2      * 生成资源数组
     3      *
     4      * @return 结果集
     5      */
     6     private static List<FieldDemo> getListSource() {
     7         List<FieldDemo> fieldDemos = new ArrayList<>();
     8         FieldDemo fieldDemo = new FieldDemo();
     9         fieldDemo.setField("ID");
    10         fieldDemo.setAlias("ID");
    11         fieldDemo.setFieldKey("关键字");
    12         fieldDemo.setOwner("mysql");
    13         fieldDemo.setFieldNumber(1);
    14 
    15         FieldDemo fieldDemo2 = new FieldDemo();
    16         fieldDemo2.setField("NAME");
    17         fieldDemo2.setAlias("CHNAME");
    18         fieldDemo2.setFieldKey("名称");
    19         fieldDemo2.setOwner("mysql");
    20         fieldDemo2.setFieldNumber(2);
    21 
    22         FieldDemo fieldDemo3 = new FieldDemo();
    23         fieldDemo3.setField("ISDELETED");
    24         fieldDemo3.setAlias("DELETED");
    25         fieldDemo3.setFieldKey("是否删除");
    26         fieldDemo3.setOwner("mysql");
    27         fieldDemo3.setFieldNumber(3);
    28 
    29         FieldDemo fieldDemo4 = new FieldDemo();
    30         fieldDemo4.setField("ORDERNO");
    31         fieldDemo4.setAlias("ORDERNO");
    32         fieldDemo4.setFieldKey("序号");
    33         fieldDemo4.setOwner("mysql");
    34         fieldDemo4.setFieldNumber(4);
    35 
    36         fieldDemos.add(fieldDemo);
    37         fieldDemos.add(fieldDemo2);
    38         fieldDemos.add(fieldDemo3);
    39         fieldDemos.add(fieldDemo4);
    40 
    41         return fieldDemos;
    42     }
    View Code

        map模型:

     1 /**
     2      * 生成map
     3      *
     4      * @return map结果集
     5      */
     6     private static Map<FieldDemo, FieldDemo> getMapSource() {
     7         Map<FieldDemo, FieldDemo> map = new HashMap<>();
     8         List<FieldDemo> listSource = getListSource();
     9         List<FieldDemo> listSource2 = getListSource2();
    10         for (FieldDemo fieldDemo : listSource) {
    11             for (FieldDemo demo : listSource2) {
    12                 if (fieldDemo.getField().equalsIgnoreCase(demo.getField())) {
    13                     map.put(fieldDemo, demo);
    14                 }
    15             }
    16         }
    17         return map;
    18     }
    19 
    20 
    21     private static List<FieldDemo> getListSource2() {
    22         List<FieldDemo> fieldDemos = new ArrayList<>();
    23         FieldDemo fieldDemo = new FieldDemo();
    24         fieldDemo.setField("ID");
    25         fieldDemo.setAlias("ID");
    26         fieldDemo.setFieldKey("关键字");
    27         fieldDemo.setOwner("mysql");
    28         fieldDemo.setFieldNumber(1);
    29 
    30 
    31         FieldDemo fieldDemo2 = new FieldDemo();
    32         fieldDemo2.setField("NAME");
    33         fieldDemo2.setAlias("CHNAME");
    34         fieldDemo2.setFieldKey("名称");
    35         fieldDemo2.setOwner("mysql");
    36         fieldDemo2.setFieldNumber(2);
    37 
    38 
    39         FieldDemo fieldDemo3 = new FieldDemo();
    40         fieldDemo3.setField("ISDELETED");
    41         fieldDemo3.setAlias("DELETED");
    42         fieldDemo3.setFieldKey("是否删除");
    43         fieldDemo3.setOwner("mysql");
    44         fieldDemo3.setFieldNumber(3);
    45 
    46 
    47         FieldDemo fieldDemo4 = new FieldDemo();
    48         fieldDemo4.setField("ORDERNO");
    49         fieldDemo4.setAlias("ORDERNO");
    50         fieldDemo4.setFieldKey("序号");
    51         fieldDemo4.setOwner("mysql");
    52         fieldDemo4.setFieldNumber(4);
    53 
    54 
    55         fieldDemos.add(fieldDemo4);
    56         fieldDemos.add(fieldDemo3);
    57         fieldDemos.add(fieldDemo);
    58         fieldDemos.add(fieldDemo2);
    59         return fieldDemos;
    60     }
    View Code

       业务

       核心处理
     1  /**
     2      * 让复杂map按照list的顺序排序
     3      *
     4      * @param list
     5      * @param map
     6      * @param newMap
     7      */
     8     public static void sortMapFromList(List<FieldDemo> list, Map<FieldDemo, FieldDemo> map, Map<FieldDemo, FieldDemo> newMap) {
     9 
    10         Map<FieldDemo, Integer> middleMap = new HashMap<>(16);
    11 
    12         for (FieldDemo fieldDemo : list) {
    13             for (Map.Entry<FieldDemo, FieldDemo> fieldDemoFieldDemoEntry : map.entrySet()) {
    14                 String field = fieldDemoFieldDemoEntry.getKey().getField();
    15 
    16                 if (field.equalsIgnoreCase(fieldDemo.getField())) {
    17                     // 生成中间存储map,存入数据和对应的序号
    18                     middleMap.put(fieldDemoFieldDemoEntry.getKey(), fieldDemo.getFieldNumber());
    19                 }
    20             }
    21         }
    22 
    23         // 生成的结果集加入到list中
    24         List<Map.Entry<FieldDemo, Integer>> entryList = new ArrayList(middleMap.entrySet());
    25 
    26         // 根据value 进行排序
    27         Collections.sort(entryList, new Comparator<Map.Entry<FieldDemo, Integer>>() {
    28             @Override
    29             public int compare(Map.Entry<FieldDemo, Integer> o1, Map.Entry<FieldDemo, Integer> o2) {
    30                 return o1.getValue().compareTo(o2.getValue());
    31             }
    32         });
    33 
    34         System.out.println("entryList:" + new Gson().toJson(entryList));
    35 
    36         for (Map.Entry<FieldDemo, Integer> fieldDemoFieldDemoEntry : entryList) {
    37 
    38             for (Map.Entry<FieldDemo, FieldDemo> demoFieldDemoEntry : map.entrySet()) {
    39 
    40                 String field = demoFieldDemoEntry.getKey().getField();
    41 
    42                 if (field.equalsIgnoreCase(fieldDemoFieldDemoEntry.getKey().getField())) {
    43 
    44                     System.out.println("fieldNumber:" + new Gson().toJson(fieldDemoFieldDemoEntry.getValue()));
    45                     System.out.println("fieldDemoFieldDemoEntry:" + new Gson().toJson(fieldDemoFieldDemoEntry.getKey()));
    46                     System.out.println("demoFieldDemoEntry:" + new Gson().toJson(demoFieldDemoEntry.getValue()));
    47 
    48                     newMap.put(fieldDemoFieldDemoEntry.getKey(), demoFieldDemoEntry.getValue());
    49                 }
    50             }
    51         }
    52     }
    View Code

      测试

     1 public static void main(String[] args) {
     2 
     3         FieldDemo fieldDemo = new FieldDemo();
     4 
     5         System.out.println("fieldDemo顺序:" + new Gson().toJson(fieldDemo));
     6 
     7         // 让listSource2跟listSource顺序一致
     8         Map<FieldDemo, FieldDemo> mapSource = getMapSource();
     9 
    10         System.out.println("map顺序:" + new Gson().toJson(mapSource));
    11 
    12         List<FieldDemo> listSource = getListSource();
    13 
    14         System.out.println("list顺序:" + new Gson().toJson(listSource));
    15 
    16         // mapSource 跟 listSource顺序一致,去除不是listSource理的字段
    17         Map<FieldDemo, FieldDemo> newMap = new HashMap<>();
    18 
    19         sortMapFromList(listSource, mapSource, newMap);
    20 
    21         System.out.println("排序后:" + newMap);
    22     }
    View Code

    待开发中

    • 环境设置 (Prerequisite):

      • 环境
        JDK1.8
      • 配置
        IDEA 2019
      • 存在问题
        暂无

    • 进阶篇 (Advanced):

      研究中 ......

  • 相关阅读:
    线程和信号
    线程取消状态和取消类型
    线程本地缓存
    线程安全函数的概念
    线程/同步对象的属性对象
    查看安全策略
    ss性能
    三次握手四次断开
    线程同步--屏障
    vs2008 编译时候 自动关闭 问题解决方法
  • 原文地址:https://www.cnblogs.com/liuyangfirst/p/13341875.html
Copyright © 2011-2022 走看看