map数据按照list排序
简介 (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排序的更多相关文章
- C++ STL中Map的按Key排序和按Value排序
map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区 分),我们用map来进 ...
- C++ STL中Map的按Key排序跟按Value排序
C++ STL中Map的按Key排序和按Value排序 map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定 ...
- 2.2 C语言_实现数据容器vector(排序功能)
上一节我们说到我们己经实现了一般Vector可以做到的自动扩充,告诉随机存取,那么现在我们需要完成vector的一个排序的功能. 排序算法我们网上一百度哇~~!很常见的就有8大排序算法: 1.选择排序 ...
- 关于expanded一级二级菜单数据的分组排序
最新再弄关于expandedlistview相关的东西,所以需求是需要对一级菜单根据时间排序,同时二级菜单也需要根据时间排序,距离现在最近的时间显示在最前面. 效果就是如下: --group2 -- ...
- Java8-2-Lambda表达式实战-一句话实现Map中按照Value排序
在上一讲中, 我们着重的讲了表达式的一些基础知识和基本的使用, 今天我们来实战一把, 对Map的Value值排序进行简化. 在以前的思路我们的做法如下: /** * * Map根据value排序; * ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 设置排序
jQuery EasyUI 数据网格 - 设置排序 本实例演示如何通过点击列表头来排序数据网格(DataGrid). 数据网格(DataGrid)的所有列可以通过点击列表头来排序.您可以定义哪列可以排 ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 自定义排序
jQuery EasyUI 数据网格 - 自定义排序 如果默认的排序行为不满足您的需求,您可以自定义数据网格(datagrid)的排序行为. 最基础的,用户可以在列上定义一个排序函数,函数名是 sor ...
- pandas练习(二)------ 数据过滤与排序
数据过滤与排序------探索2012欧洲杯数据 相关数据见(github) 步骤1 - 导入pandas库 import pandas as pd 步骤2 - 数据集 path2 = ". ...
- bootstrapTable的数据后端分页排序
数据后端分页排序,其实就是sql语句中oeder by做一些限制. 之前在写sql语句中的order by是写死,既然要写活,就要传参数到后台. 之前讲到bootstrapTable的queryPar ...
随机推荐
- 用 npm 搭建vue项目
一.开发环境 vue推荐开发环境: Node.js: javascript运行环境(runtime),不同系统直接运行各种编程语言 npm: Nodejs下的包管理器. webpack: 它主要的用途 ...
- 【服务器】CentOs7系统使用宝塔面板搭建网站,有FTP配置(保姆式教程)
内容繁多,请耐心跟着流程走,在过程中遇到问题请在下面留言(我只是小白,请专业人士喷轻点). 这次用thinkphp5.1做演示,单纯的做演示,我打算下一篇文章用typecho(博客框架)演示. 前言 ...
- 小师妹学JVM之:java的字节码byte code简介
目录 简介 Byte Code的作用 查看Byte Code字节码 java Byte Code是怎么工作的 总结 简介 Byte Code也叫做字节码,是连接java源代码和JVM的桥梁,源代码编译 ...
- egret.sys.TextNode
class Test extends egret.Shape{ protected textNode:egret.sys.TextNode; constructor(){ this.width = t ...
- dart快速入门教程 (4)
4.流程控制 4.1.分支结构 1.if语句 void main() { int score = 80; if (score >= 90) { print('优秀'); } else if (s ...
- 正确卸载vs2015及以前版本方式
官网工具:https://github.com/Microsoft/VisualStudioUninstaller/releases 亲自测试过,很好用. (完)
- grunt之easy demo
首先安装grunt-cli cnpm install -g grunt-cli 接下来创建package.json,内容如下 { "name": "demo ...
- 小师妹学JVM之:cache line对代码性能的影响
目录 简介 一个奇怪的现象 两个问题的答案 CPU cache line inc 和 add 总结 简介 读万卷书不如行万里路,讲了这么多assembly和JVM的原理与优化,今天我们来点不一样的实战 ...
- os.environ的详解
我们想要用Python获得一些有关系统的各种信息的时候就不得不想到os的environ,那这里面都具体包含了那些内容呢? 简介 对于官方的解释,environ是一个字符串所对应环境的映像对象.这是什么 ...
- smtp 发送邮件实例
发送邮件的关键点在于邮箱服务器地址是否一致 //smtp 服务器地址,咨询 smtp 提供商,例如 smtp.126.net 这种格式,端口和服务器地址是配套的,一般是 465 或者 25 SmtpC ...