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 ...
随机推荐
- 入门大数据---Spark累加器与广播变量
一.简介 在 Spark 中,提供了两种类型的共享变量:累加器 (accumulator) 与广播变量 (broadcast variable): 累加器:用来对信息进行聚合,主要用于累计计数等场景: ...
- 不就是语法和长难句吗—笔记总结Day4
第六课 英语的特殊结构 1.强调句型 It is...that / who / which(少见)... * 强调句型可以强调句子中所有成分(唯一不能强调谓语)* It is obviously t ...
- sql:主键(primary key)和唯一索引(unique index)区别
主键一定是唯一性索引,唯一性索引并不一定就是主键. 所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引. 因为主键可以唯一标识某一行记录,所以可以确保执行数据 ...
- vs2013, EF6.0.0.0 使用Migrations来更新数据库时报错
1.vs中,程序包管理器控制台 2.执行,Enable-Migrations 报错: Migrations have already been enabled in project 'dd'. To ...
- java 和 c++ 的三目运算符的区别
转载请注明出处:http://www.cnblogs.com/liangyongrui/p/6348001.html 以前很少用java,就知道java和c++差不多. 今天就踩了一个坑. 不吐糟,直 ...
- 图文详解Prometheus监控+Grafana+Alertmanager告警安装使用
一:前言 一个服务上线了后,你想知道这个服务是否可用,需要监控.假如线上出故障了,你要先于顾客感知错误,你需要监控.还有对数据库,服务器的监控,等等各层面的监控. 近年来,微服务架构的流行,服务数越来 ...
- dva的简介
dva的定义 dva 是基于现有应用架构 (redux + react-router + redux-saga 等)的一层轻量封装; redux 他是react当中的仓库,如果熟悉vue的话,他的功能 ...
- Docker装的Oracle 11g没有HR用户怎么办?一个脚本解决问题!
#0x0 问题描述 这个学期有一门Oracle的课,我图省事就直接拉了个docker镜像来做练习,一直倒也没啥问题,但是今天的作业需要用到HR这个模板用户. 然而我执行alter user hr ac ...
- Linux系统中到底应该怎么理解系统的平均负载
02 | 基础篇:到底应该怎么理解“平均负载”? 每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况.比如像下面这样,我在命令行里输入了 upt ...
- JVM 专题十四:本地方法接口
1. 本地方法接口 2. 什么是本地方法? 简单来讲,一个Native Method就是一个Java调用非Java代码的接口.一个Native Method是这样一个java方法:该方法的实现由非Ja ...