直接上代码List组合排序

import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class Test {public static void main(String[] args) {// 相同名字不同类型的数据组合排序,优先排序点击量(当点击量相同排时长)//最终结果[{CNT=43, NAME=文档点击量}, {CNT=25, NAME=文档使用时长}, {CNT=42, NAME=CG素材点击量}, {CNT=30, NAME=CG素材使用时长}, {CNT=41, NAME=视频点击量}, {CNT=35, NAME=视频使用时长}]Map<String, String> map2 = new HashMap<String, String>();map2.put("NAME", "视频点击量");map2.put("CNT", "41");Map<String, String> map3 = new HashMap<String, String>();map3.put("NAME", "文档点击量");map3.put("CNT", "43");Map<String, String> map1 = new HashMap<String, String>();map1.put("NAME", "CG素材点击量");map1.put("CNT", "42");Map<String, String> map4 = new HashMap<String, String>();map4.put("NAME", "CG素材使用时长");map4.put("CNT", "30");Map<String, String> map6 = new HashMap<String, String>();map6.put("NAME", "文档使用时长");map6.put("CNT", "25");Map<String, String> map5 = new HashMap<String, String>();map5.put("NAME", "视频使用时长");map5.put("CNT", "35");List<Map<String, String>> list = new ArrayList<Map<String,String>>();list.add(map2);list.add(map3);list.add(map1);list.add(map5);list.add(map4);list.add(map6);listRegroup(list);System.out.println(list);}public static List<Map<String,String>> listRegroup(List<Map<String,String>> list){Collections.sort(list, new Comparator<Map<String,String>>() {@Overridepublic int compare(Map<String,String> o1, Map<String,String> o2) {/*** 名字组合排序*/Collator collator = Collator.getInstance();return    collator.getCollationKey(o1.get("NAME")).compareTo(collator.getCollationKey(o2.get("NAME")));}});List<Map<String,String>> listString1 = new ArrayList<>(list);System.out.println("------------------");compareList(listString1, list);for (Map<String,String> entity : listString1) {System.out.print(entity.get("CNT"));System.out.println(entity.get("NAME"));}return listString1;}public static void compareList(List<Map<String,String>> listString1,List<Map<String,String>> list){for (int i = 0; i < list.size(); i++) {if(i%2==0){// 判断当前点击量与下一组点击量大小,小于则当前组合向后移动if((i+2)<list.size()){if(Integer.parseInt(list.get(i).get("CNT").toString())<Integer.parseInt(list.get(i+2).get("CNT").toString())){Collections.swap(listString1, i, i+2);Collections.swap(listString1, i+1, i+3);Collections.swap(list, i, i+2);Collections.swap(list, i+1, i+3);compareList(listString1, list);break;}else if(Integer.parseInt(list.get(i).get("CNT").toString()) == Integer.parseInt(list.get(i+2).get("CNT").toString())){if((i+2)<list.size()){if(Integer.parseInt(list.get(i+1).get("CNT").toString())<Integer.parseInt(list.get(i+3).get("CNT").toString())){Collections.swap(listString1, i, i+2);Collections.swap(listString1, i+1, i+3);Collections.swap(list, i, i+2);Collections.swap(list, i+1, i+3);compareList(listString1, list);break;}}}}}}return;}/*** 调换集合中两个指定位置的元素, 若两个元素位置中间还有其他元素,需要实现中间元素的前移或后移的操作。* @param list 集合* @param oldPosition 需要调换的元素* @param newPosition 被调换的元素* @param <T>*/public static <T> void swap2(List<T> list, int oldPosition, int newPosition){if(null == list){throw new IllegalStateException("The list can not be empty...");}// 向前移动,前面的元素需要向后移动if(oldPosition < newPosition){for(int i = oldPosition; i < newPosition; i++){Collections.swap(list, i, i + 1);}}// 向后移动,后面的元素需要向前移动if(oldPosition > newPosition){for(int i = oldPosition; i > newPosition; i--){Collections.swap(list, i, i - 1);}}}}

List多条件组合排序相关推荐

  1. 5.12 按照多个条件进行组合排序 [原创Excel教程]

    原文:http://coolketang.com/staticOffice/5a97f32a9f5454403c524f4b.html 1. 本节课将为您演示,如何对表格进行多条件组合排序.首先点击[ ...

  2. 多条件组合查询+分页

    比较麻烦,把他记录下来. 前台UI: 实现的类代码: 程序代码 /// <summary>         /// 多条件组合查询         /// </summary> ...

  3. oracle or条件后 排序,WHERE条件和排序

    一.条件简介 了解条件的一般形式 最普通的条件如下形式: gyj@OCM> Select * from t1 where name='gyj2'; ID NAME           SALAR ...

  4. 亿级数据多条件组合查询——秒级响应解决方案

    1 概述 组合查询为多条件组合查询,在很多场景下都有使用.购物网站中通过勾选类别.价格.销售量范围等属性来对所有的商品进行筛选,筛选出满足客户需要的商品,这是一种典型的组合查询.在小数据量的情况下,后 ...

  5. 《MySQL数据操作与查询》- 维护学生信息、老师信息和成绩信息 支持按多种条件组合查询学生信息和成绩信息

    综合项目需求 一.系统整体功能 系统需支持以下功能: 维护学生信息.老师信息和成绩信息 支持按多种条件组合查询学生信息和成绩信息 学生 Student(id,班级id,学号,姓名,性别,电话,地址,出 ...

  6. 05-Elasticsearch-DSL高级检索[分页, 分词, 权重, 多条件, 过滤, 排序, 关键词高亮, 深度分页, 滚动搜索, 批量Mget]...

    DSL搜索 词库准备 骚年 帅气 新闻网 新闻 闻网 新 闻 网 索引准备 PUT /shop {"settings": {"number_of_shards" ...

  7. Numpy 数组复合排序——mX4列,根据多列组合排序

    Numpy 数组复合排序--mX4列,根据多列组合排序 一. Numpy 仅根据某列对 array(mX4)整体排序用argsort import numpy as npdata = np.array ...

  8. java 多条件比较_Java 多条件复杂排序小结

    这里面最复杂的就是第3点,对秒杀活动进行排序,排序条件多,排序条件使用各不相同,在笔试中给我带来了很大的困扰,最后当然也是没做完啦···· 解决方案 吃完晚饭开始寻找解决方法,觉得应该会很有意思,果然 ...

  9. Py之pandas:对dataframe型数据排序相关的问题总结之按照多个字段的多个条件进行排序(先打乱再排序)

    Py之pandas:对dataframe型数据排序相关的问题总结之按照多个字段的多个条件进行排序(先打乱再排序) 目录 对dataframe型数据排序相关的问题总结之按照多个字段的多个条件进行排序(先 ...

最新文章

  1. 剑指offer十九之顺时针打印矩阵
  2. 公众号怎么设置滑动文字_上善.小知——(1)公众号白名单怎么设置?
  3. 无线通信信号自由空间损耗
  4. JMS(二):简单的JMS入门实例
  5. 显示多文档标签_HTML常用基础标签,前端从入门到精通
  6. 2019牛客暑期多校训练营(第四场)
  7. 手动标记用例状态_【自动化接口用例】从 1 到 1000 过程中的实践和思考
  8. 速修复!VMware vCenter Server 所有版本受严重的 RCE 漏洞影响
  9. matlab乘与点乘的区别 (*与.* ^与.^)
  10. android上对cookie的读写操作,Android上对Cookie的读写操作(附Demo)
  11. Firefox扩展开发初级教程——开发一个简单的扩展
  12. PDF文件密码破解方法有几种,快来看!
  13. c语言编程基础心得,C语言编程学习心得体会
  14. 印象笔记,石墨笔记和Effie哪个更适合影评人?
  15. 内网渗透中的域管与域控快速定位
  16. 关于Uncaught TypeError (Cannot read property ..undefined)的解决办法
  17. 如何通过数据分析,提升游戏次日留存
  18. 哪些公司有计算机财务管理,计算机财务管理汇总.doc
  19. 致四个月后自己的一封信
  20. 阑尾炎护理查房PPT模板

热门文章

  1. 30_ue4[动画]02_动画蓝图播放蒙太奇和打包
  2. 退役赛总结(山东省第八届ACM程序设计大赛总结)
  3. 新手用cdr如何设计名片_新名片设计
  4. [POI2007]ZAP-Queries 莫比乌斯反演(模板)
  5. 当对手有 45 亿资金、1 亿用户,你怎么办?
  6. Distilled Dual-Encoder Model for Vision-Language Understanding
  7. 关于重装系统无法连接网络问题的解决方法
  8. 阿尔法蛋机器人tf卡_阿尔法蛋机器人哪款好适合几岁孩子,超能蛋早教机真实效果评测(价格309元)...
  9. 人本是猴子,该七十二变
  10. Unity Awake OnEnable Start 和Update 先后顺序探究