//Java 实现多字段排序

HashMap map1 = new HashMap();

map1.put("dataindex0", null);map1.put("dataindex1", 6);map1.put("dataindex2", 1.1);map1.put("id", 1);

HashMap map2 = new HashMap();

map2.put("dataindex0", "2017-12-01");map2.put("dataindex1", 5);map2.put("dataindex2", 1.2);map2.put("id", 2);

HashMap map3 = new HashMap();

map3.put("dataindex0", "2017-12-02");map3.put("dataindex1", 7);map3.put("dataindex2", 2.3);map3.put("id", 3);

HashMap map4 = new HashMap();

map4.put("dataindex0", "2017-12-02");map4.put("dataindex1", 7);map4.put("dataindex2", 3);map4.put("id", 4);

HashMap map5 = new HashMap();

map5.put("dataindex0", "2017-12-03");map5.put("dataindex1", null);map5.put("dataindex2", 9.1);map5.put("id", 5);

HashMap map6 = new HashMap();

map6.put("dataindex0", "2017-12-03");map6.put("dataindex1", 3);map6.put("dataindex2", 8.1);map6.put("id", 6);

List> list = new ArrayList>();

list.add(map6);list.add(map1);list.add(map5);list.add(map4);list.add(map2);list.add(map3);

//         System.out.println("Before Sort: " + list);

final String[] orderByCols = {"dataindex0","dataindex1","dataindex2"};

//         final String[] orderByCols = {"dataindex0","dataindex1"};

//         final String[] orderByCols = {"dataindex0"};

//Mannual OrderBy

Collections.sort(list,new Comparator() {

@Override

public int compare(Map o1, Map o2) {

return recursion(o1, o2, 0);

}

private int recursion(Map o1, Map o2, int i) {

if (o1.containsKey(orderByCols[i]) && o2.containsKey(orderByCols[i])) {

Object value1 = o1.get(orderByCols[i]);

Object value2 = o2.get(orderByCols[i]);

if (value1 == null && value2 == null) {

if ((i+1) < orderByCols.length) {

int recursion = recursion(o1, o2, i+1);

return recursion;

}else{

return 0;

}

}else if(value1 == null && value2 != null){

return 1;

}else if(value1 != null && value2 == null){

return -1;

}else{

if (value1.equals(value2)) {

if ((i+1) < orderByCols.length) {

return recursion(o1, o2, i+1);

}else{

return 0;

}

}else{

if (value1 instanceof String && value2 instanceof String) {

return value1.toString().compareTo(value2.toString());

}else{

return new BigDecimal(value1.toString()).compareTo(new BigDecimal(value2.toString()));

}

}

}

}else{

System.out.println(" ** The current map do not containskey : " + orderByCols[i] + ",or The value of key is null **");

return 0;

}

}

});

异想维度 java_Java实现多字段(维度)复杂排序相关推荐

  1. 口径、维度、指标和字段

    口径.维度.指标和字段 比如,要得到北京地区,上海地区,深圳地区的销售总额. 字段:一般关系型数据表的表头都是由字段组成. 前提是已经有一张表. 口径就是完成这个需求的逻辑:首先对地区字段进行分组,然 ...

  2. 数据仓库建模方法/范式建模法/维度建模法/事实表/维度表/优缺点/建模流程/概念建模/逻辑建模/物理建模

    常见的有 范式建模法.维度建模法.实体建模法等,每种方法从本质上将是从不同的角度看待业务中的问题,不管是从技术层面还是从业务层面,都代表了哲学上的一种世界观. 1 范式建模法(Third Normal ...

  3. 理解维度数据仓库——事实表、维度表、聚合表

    一.事实表 在多维数据仓库中,保存度量值的详细值或事实的表称为"事实表".一个按照州.产品和月份划分的销售量和销售额存储的事实表有5个列,概念上与下面的示例类似. 在这些事实表的示 ...

  4. 微软BI 之SSAS 系列 - 多维数据集维度用法之二 事实维度(退化维度 Degenerate Dimension)...

    这篇文章是基于上一篇 SSAS 系列 - 多维数据集维度用法之一 引用维度 Referenced Dimension 继续讲解多维数据集维度用法中的事实维度. 事实维度,顾名思义就是把事实表 Fact ...

  5. 「机器学习速成」嵌套:高维度数据映射到低维度空间

    https://www.toutiao.com/a6707188638792286727/ 大家好,今天我们学习[机器学习速成]之 嵌套:高维度数据映射到低维度空间. 嵌套将高维度数据映射到低维度空间 ...

  6. HAWQ取代传统数仓实践(十)——维度表技术之杂项维度

    一.什么是杂项维度 简单地说,杂项维度就是一种包含的数据具有很少可能值的维度.事务型商业过程通常产生一系列混杂的.低基数的标志位或状态信息.与其为每个标志或属性定义不同的维度,不如建立单独的将不同维度 ...

  7. 数据仓库之建模 维度表 事实表 维度建模三种模式 如何维度建模缓慢变化的维度 建模体系

    数据仓库之建模 ER建模 维度表和事实表 维度建模三种模式 如何维度建模 什么是缓慢变化的维度 最常见的三种数据仓库建模体系 联机分析处理 OLAP 元数据(Metadata) 数据仓库建模包含ER建 ...

  8. 054_《奇思异想编程序Delphi篇》

    <奇思异想编程序Delphi篇> Delphi 教程 系列书籍 (054) <奇思异想编程序Delphi篇> 网友(邦)整理 EMail: shuaihj@163.com 下载 ...

  9. 成功解决 绘图时行坐标名或列坐标名出现f0、f1、f2、f3、f4、f5(或者Column_0、Column_1、Column_2、Column_3)等命名而不是想要的具体对应字段命名

    成功解决 绘图时行坐标名或列坐标名出现f0.f1.f2.f3.f4.f5(或者Column_0.Column_1.Column_2.Column_3)等命名而不是想要的具体对应字段命名 目录 解决问题 ...

最新文章

  1. 【有图有真相】静态NAT、动态NAT、PAT、端口映射的详细配置过程
  2. python下载文件到指定文件夹-Python 获取指定文件夹下的目录和文件的实现
  3. (转)目前比较全的CSS重设(reset)方法总结
  4. 2019 年百度之星·程序设计大赛 - 初赛一
  5. leetcode 476. Number Complement | 476. 数字的补数(位运算)
  6. python嵩天第二版第五章_如何避免从入门到放弃——python小组学习复盘
  7. 大数据之Spark集群安装及简单使用
  8. linux进程管理子系统分析,linux进程管理子系统简要分析
  9. 收藏~10年软件测试人员的工作方法进阶汇总
  10. photon 服务器操作系统,photon 云服务器
  11. 瑞芯微RK3128-微信Airkiss2.0配网功能调试及实现
  12. [UESTC SC T4] Chika 的烦恼
  13. 计算机组成原理第三章ppt,计算机组成原理第三章幻灯片(白中英版).ppt
  14. 完整版28K易支付系统源码+第四方Oreo支付源码
  15. Java 将Word转为HTML的方法
  16. 墨菲定律吉德林法则吉尔伯特定律沃尔森法则福克兰定律
  17. 苹果 iPhone、Mac日历订阅源收集
  18. linux中tac的用法,如何在Linux中使用“cat”和“tac”命令与示例
  19. 因为1024图片 AppIcon 图标包含了透明度导致app上传ios 代码报错
  20. 成功实现NAS家庭服务器(流媒体播放、文件共享及下载机)

热门文章

  1. linux 下 storm环境搭建,Storm在Ubuntu环境下的单机部署
  2. mysql 内存溢出_mysql - MySQL在非常大的表上计算性能 - 堆栈内存溢出
  3. vc mysql 图片_VC连接MySQL
  4. python如何设计系统界面教程_python中pycharm软件界面介绍与配置
  5. java高级编程期末考试题_java高级编程考题
  6. OFDM技术及其应用
  7. 前端开发 —— BOM
  8. WPF快速入门系列(2)——深入解析依赖属性
  9. _编程语言_C++_Lambda函数与表达式
  10. Mac MySQLdb模块安装,可算解决了