• 简介 (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. 入门大数据---Spark累加器与广播变量

    一.简介 在 Spark 中,提供了两种类型的共享变量:累加器 (accumulator) 与广播变量 (broadcast variable): 累加器:用来对信息进行聚合,主要用于累计计数等场景: ...

  2. 不就是语法和长难句吗—笔记总结Day4

    第六课 英语的特殊结构 1.强调句型 It is...that / who / which(少见)... * 强调句型可以强调句子中所有成分(唯一不能强调谓语)*  It is obviously t ...

  3. sql:主键(primary key)和唯一索引(unique index)区别

    主键一定是唯一性索引,唯一性索引并不一定就是主键. 所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引. 因为主键可以唯一标识某一行记录,所以可以确保执行数据 ...

  4. vs2013, EF6.0.0.0 使用Migrations来更新数据库时报错

    1.vs中,程序包管理器控制台 2.执行,Enable-Migrations 报错: Migrations have already been enabled in project 'dd'. To ...

  5. java 和 c++ 的三目运算符的区别

    转载请注明出处:http://www.cnblogs.com/liangyongrui/p/6348001.html 以前很少用java,就知道java和c++差不多. 今天就踩了一个坑. 不吐糟,直 ...

  6. 图文详解Prometheus监控+Grafana+Alertmanager告警安装使用

    一:前言 一个服务上线了后,你想知道这个服务是否可用,需要监控.假如线上出故障了,你要先于顾客感知错误,你需要监控.还有对数据库,服务器的监控,等等各层面的监控. 近年来,微服务架构的流行,服务数越来 ...

  7. dva的简介

    dva的定义 dva 是基于现有应用架构 (redux + react-router + redux-saga 等)的一层轻量封装; redux 他是react当中的仓库,如果熟悉vue的话,他的功能 ...

  8. Docker装的Oracle 11g没有HR用户怎么办?一个脚本解决问题!

    #0x0 问题描述 这个学期有一门Oracle的课,我图省事就直接拉了个docker镜像来做练习,一直倒也没啥问题,但是今天的作业需要用到HR这个模板用户. 然而我执行alter user hr ac ...

  9. Linux系统中到底应该怎么理解系统的平均负载

    02 | 基础篇:到底应该怎么理解“平均负载”? 每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况.比如像下面这样,我在命令行里输入了 upt ...

  10. JVM 专题十四:本地方法接口

    1. 本地方法接口 2. 什么是本地方法? 简单来讲,一个Native Method就是一个Java调用非Java代码的接口.一个Native Method是这样一个java方法:该方法的实现由非Ja ...