• 简介 (Introduction):

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

    • 结构图
      list顺序

       [
      {
      "fieldKey":"关键字",
      "alias":"ID",
      "owner":"mysql",
      "field":"ID",
      "fieldNumber":1
      },
      {
      "fieldKey":"名称",
      "alias":"CHNAME",
      "owner":"mysql",
      "field":"NAME",
      "fieldNumber":2
      },
      {
      "fieldKey":"是否删除",
      "alias":"DELETED",
      "owner":"mysql",
      "field":"ISDELETED",
      "fieldNumber":3
      },
      {
      "fieldKey":"序号",
      "alias":"ORDERNO",
      "owner":"mysql",
      "field":"ORDERNO",
      "fieldNumber":4
      }
      ]

      map顺序

       {
      "ORDERNO":{
      "fieldKey":"序号",
      "alias":"ORDERNO",
      "owner":"mysql",
      "field":"ORDERNO",
      "fieldNumber":4
      },
      "NAME":{
      "fieldKey":"名称",
      "alias":"CHNAME",
      "owner":"mysql",
      "field":"NAME",
      "fieldNumber":2
      },
      "ISDELETED":{
      "fieldKey":"是否删除",
      "alias":"DELETED",
      "owner":"mysql",
      "field":"ISDELETED",
      "fieldNumber":3
      },
      "ID":{
      "fieldKey":"关键字",
      "alias":"ID",
      "owner":"mysql",
      "field":"ID",
      "fieldNumber":1
      }
      }
  • 核心

  • 快速上手(Getting Started)

模型

list模型:

 /**
* 生成资源数组
*
* @return 结果集
*/
private static List<FieldDemo> getListSource() {
List<FieldDemo> fieldDemos = new ArrayList<>();
FieldDemo fieldDemo = new FieldDemo();
fieldDemo.setField("ID");
fieldDemo.setAlias("ID");
fieldDemo.setFieldKey("关键字");
fieldDemo.setOwner("mysql");
fieldDemo.setFieldNumber(1); FieldDemo fieldDemo2 = new FieldDemo();
fieldDemo2.setField("NAME");
fieldDemo2.setAlias("CHNAME");
fieldDemo2.setFieldKey("名称");
fieldDemo2.setOwner("mysql");
fieldDemo2.setFieldNumber(2); FieldDemo fieldDemo3 = new FieldDemo();
fieldDemo3.setField("ISDELETED");
fieldDemo3.setAlias("DELETED");
fieldDemo3.setFieldKey("是否删除");
fieldDemo3.setOwner("mysql");
fieldDemo3.setFieldNumber(3); FieldDemo fieldDemo4 = new FieldDemo();
fieldDemo4.setField("ORDERNO");
fieldDemo4.setAlias("ORDERNO");
fieldDemo4.setFieldKey("序号");
fieldDemo4.setOwner("mysql");
fieldDemo4.setFieldNumber(4); fieldDemos.add(fieldDemo);
fieldDemos.add(fieldDemo2);
fieldDemos.add(fieldDemo3);
fieldDemos.add(fieldDemo4); return fieldDemos;
}

map模型:

 /**
* 生成map
*
* @return map结果集
*/
private static Map<FieldDemo, FieldDemo> getMapSource() {
Map<FieldDemo, FieldDemo> map = new HashMap<>();
List<FieldDemo> listSource = getListSource();
List<FieldDemo> listSource2 = getListSource2();
for (FieldDemo fieldDemo : listSource) {
for (FieldDemo demo : listSource2) {
if (fieldDemo.getField().equalsIgnoreCase(demo.getField())) {
map.put(fieldDemo, demo);
}
}
}
return map;
} private static List<FieldDemo> getListSource2() {
List<FieldDemo> fieldDemos = new ArrayList<>();
FieldDemo fieldDemo = new FieldDemo();
fieldDemo.setField("ID");
fieldDemo.setAlias("ID");
fieldDemo.setFieldKey("关键字");
fieldDemo.setOwner("mysql");
fieldDemo.setFieldNumber(1); FieldDemo fieldDemo2 = new FieldDemo();
fieldDemo2.setField("NAME");
fieldDemo2.setAlias("CHNAME");
fieldDemo2.setFieldKey("名称");
fieldDemo2.setOwner("mysql");
fieldDemo2.setFieldNumber(2); FieldDemo fieldDemo3 = new FieldDemo();
fieldDemo3.setField("ISDELETED");
fieldDemo3.setAlias("DELETED");
fieldDemo3.setFieldKey("是否删除");
fieldDemo3.setOwner("mysql");
fieldDemo3.setFieldNumber(3); FieldDemo fieldDemo4 = new FieldDemo();
fieldDemo4.setField("ORDERNO");
fieldDemo4.setAlias("ORDERNO");
fieldDemo4.setFieldKey("序号");
fieldDemo4.setOwner("mysql");
fieldDemo4.setFieldNumber(4); fieldDemos.add(fieldDemo4);
fieldDemos.add(fieldDemo3);
fieldDemos.add(fieldDemo);
fieldDemos.add(fieldDemo2);
return fieldDemos;
}

业务

核心处理

  /**
* 让复杂map按照list的顺序排序
*
* @param list
* @param map
* @param newMap
*/
public static void sortMapFromList(List<FieldDemo> list, Map<FieldDemo, FieldDemo> map, Map<FieldDemo, FieldDemo> newMap) { Map<FieldDemo, Integer> middleMap = new HashMap<>(16); for (FieldDemo fieldDemo : list) {
for (Map.Entry<FieldDemo, FieldDemo> fieldDemoFieldDemoEntry : map.entrySet()) {
String field = fieldDemoFieldDemoEntry.getKey().getField(); if (field.equalsIgnoreCase(fieldDemo.getField())) {
// 生成中间存储map,存入数据和对应的序号
middleMap.put(fieldDemoFieldDemoEntry.getKey(), fieldDemo.getFieldNumber());
}
}
} // 生成的结果集加入到list中
List<Map.Entry<FieldDemo, Integer>> entryList = new ArrayList(middleMap.entrySet()); // 根据value 进行排序
Collections.sort(entryList, new Comparator<Map.Entry<FieldDemo, Integer>>() {
@Override
public int compare(Map.Entry<FieldDemo, Integer> o1, Map.Entry<FieldDemo, Integer> o2) {
return o1.getValue().compareTo(o2.getValue());
}
}); System.out.println("entryList:" + new Gson().toJson(entryList)); for (Map.Entry<FieldDemo, Integer> fieldDemoFieldDemoEntry : entryList) { for (Map.Entry<FieldDemo, FieldDemo> demoFieldDemoEntry : map.entrySet()) { String field = demoFieldDemoEntry.getKey().getField(); if (field.equalsIgnoreCase(fieldDemoFieldDemoEntry.getKey().getField())) { System.out.println("fieldNumber:" + new Gson().toJson(fieldDemoFieldDemoEntry.getValue()));
System.out.println("fieldDemoFieldDemoEntry:" + new Gson().toJson(fieldDemoFieldDemoEntry.getKey()));
System.out.println("demoFieldDemoEntry:" + new Gson().toJson(demoFieldDemoEntry.getValue())); newMap.put(fieldDemoFieldDemoEntry.getKey(), demoFieldDemoEntry.getValue());
}
}
}
}

测试

 public static void main(String[] args) {

         FieldDemo fieldDemo = new FieldDemo();

         System.out.println("fieldDemo顺序:" + new Gson().toJson(fieldDemo));

         // 让listSource2跟listSource顺序一致
Map<FieldDemo, FieldDemo> mapSource = getMapSource(); System.out.println("map顺序:" + new Gson().toJson(mapSource)); List<FieldDemo> listSource = getListSource(); System.out.println("list顺序:" + new Gson().toJson(listSource)); // mapSource 跟 listSource顺序一致,去除不是listSource理的字段
Map<FieldDemo, FieldDemo> newMap = new HashMap<>(); sortMapFromList(listSource, mapSource, newMap); System.out.println("排序后:" + newMap);
}

待开发中

  • 环境设置 (Prerequisite):

    • 环境
      JDK1.8
    • 配置

      IDEA 2019
    • 存在问题

      暂无

  • 进阶篇 (Advanced):

    研究中 ......

map数据按照list排序的更多相关文章

  1. C++ STL中Map的按Key排序和按Value排序

    map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区 分),我们用map来进 ...

  2. C++ STL中Map的按Key排序跟按Value排序

    C++ STL中Map的按Key排序和按Value排序 map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定 ...

  3. 2.2 C语言_实现数据容器vector(排序功能)

    上一节我们说到我们己经实现了一般Vector可以做到的自动扩充,告诉随机存取,那么现在我们需要完成vector的一个排序的功能. 排序算法我们网上一百度哇~~!很常见的就有8大排序算法: 1.选择排序 ...

  4. 关于expanded一级二级菜单数据的分组排序

    最新再弄关于expandedlistview相关的东西,所以需求是需要对一级菜单根据时间排序,同时二级菜单也需要根据时间排序,距离现在最近的时间显示在最前面. 效果就是如下: --group2  -- ...

  5. Java8-2-Lambda表达式实战-一句话实现Map中按照Value排序

    在上一讲中, 我们着重的讲了表达式的一些基础知识和基本的使用, 今天我们来实战一把, 对Map的Value值排序进行简化. 在以前的思路我们的做法如下: /** * * Map根据value排序; * ...

  6. 雷林鹏分享:jQuery EasyUI 数据网格 - 设置排序

    jQuery EasyUI 数据网格 - 设置排序 本实例演示如何通过点击列表头来排序数据网格(DataGrid). 数据网格(DataGrid)的所有列可以通过点击列表头来排序.您可以定义哪列可以排 ...

  7. 雷林鹏分享:jQuery EasyUI 数据网格 - 自定义排序

    jQuery EasyUI 数据网格 - 自定义排序 如果默认的排序行为不满足您的需求,您可以自定义数据网格(datagrid)的排序行为. 最基础的,用户可以在列上定义一个排序函数,函数名是 sor ...

  8. pandas练习(二)------ 数据过滤与排序

    数据过滤与排序------探索2012欧洲杯数据 相关数据见(github) 步骤1 - 导入pandas库 import pandas as pd 步骤2 - 数据集 path2 = ". ...

  9. bootstrapTable的数据后端分页排序

    数据后端分页排序,其实就是sql语句中oeder by做一些限制. 之前在写sql语句中的order by是写死,既然要写活,就要传参数到后台. 之前讲到bootstrapTable的queryPar ...

随机推荐

  1. 用 npm 搭建vue项目

    一.开发环境 vue推荐开发环境: Node.js: javascript运行环境(runtime),不同系统直接运行各种编程语言 npm: Nodejs下的包管理器. webpack: 它主要的用途 ...

  2. 【服务器】CentOs7系统使用宝塔面板搭建网站,有FTP配置(保姆式教程)

    内容繁多,请耐心跟着流程走,在过程中遇到问题请在下面留言(我只是小白,请专业人士喷轻点). 这次用thinkphp5.1做演示,单纯的做演示,我打算下一篇文章用typecho(博客框架)演示. 前言 ...

  3. 小师妹学JVM之:java的字节码byte code简介

    目录 简介 Byte Code的作用 查看Byte Code字节码 java Byte Code是怎么工作的 总结 简介 Byte Code也叫做字节码,是连接java源代码和JVM的桥梁,源代码编译 ...

  4. egret.sys.TextNode

    class Test extends egret.Shape{ protected textNode:egret.sys.TextNode; constructor(){ this.width = t ...

  5. dart快速入门教程 (4)

    4.流程控制 4.1.分支结构 1.if语句 void main() { int score = 80; if (score >= 90) { print('优秀'); } else if (s ...

  6. 正确卸载vs2015及以前版本方式

    官网工具:https://github.com/Microsoft/VisualStudioUninstaller/releases 亲自测试过,很好用. (完)

  7. grunt之easy demo

    首先安装grunt-cli cnpm install -g grunt-cli 接下来创建package.json,内容如下 {        "name": "demo ...

  8. 小师妹学JVM之:cache line对代码性能的影响

    目录 简介 一个奇怪的现象 两个问题的答案 CPU cache line inc 和 add 总结 简介 读万卷书不如行万里路,讲了这么多assembly和JVM的原理与优化,今天我们来点不一样的实战 ...

  9. os.environ的详解

    我们想要用Python获得一些有关系统的各种信息的时候就不得不想到os的environ,那这里面都具体包含了那些内容呢? 简介 对于官方的解释,environ是一个字符串所对应环境的映像对象.这是什么 ...

  10. smtp 发送邮件实例

    发送邮件的关键点在于邮箱服务器地址是否一致 //smtp 服务器地址,咨询 smtp 提供商,例如 smtp.126.net 这种格式,端口和服务器地址是配套的,一般是 465 或者 25 SmtpC ...