电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

java Collections 排序--多條件排序實例

瀏覽:4日期:2022-08-24 15:14:07

我就廢話不多說了,大家還是直接看代碼吧~

// 告警排序Collections.sort(domesticAirport, comparator);// 告警排序Comparator<AirportRtWeatherWarningBeanForTable> comparator = new Comparator<AirportRtWeatherWarningBeanForTable>() {@Overridepublic int compare(AirportRtWeatherWarningBeanForTable a1, AirportRtWeatherWarningBeanForTable a2) { // 首先根據是否過期排序 if(a1.isMetarExpired() && !a2.isMetarExpired()){return 1; }else if (!a1.isMetarExpired() && a2.isMetarExpired()) {return -1; } else if ((a1.isMetarExpired() && a2.isMetarExpired()) || (!a1.isMetarExpired() && !a2.isMetarExpired())) {//同時過期,或者都不過期,則按告警類型排序if (a1.getWarningColor() != a2.getWarningColor()) { return compareColor(a1.getWarningColor(), a2.getWarningColor());} } //告警類型相同,按字母排序 return a1.getCode4().compareTo(a2.getCode4()); } }; // 告警類型比較排序 public int compareColor(Color color1, Color color2) { int i = 0; int j = 0; if (color1.equals(MeteoWeatherWarningPanel.RED)) { i = 3; } else if (color1.equals(MeteoWeatherWarningPanel.YELLOW)) { i = 2; } else if (color1.equals(MeteoWeatherWarningPanel.GREEN)) { i = 1; } if (color2.equals(MeteoWeatherWarningPanel.RED)) { j = 3; } else if (color2.equals(MeteoWeatherWarningPanel.YELLOW)) { j = 2; } else if (color2.equals(MeteoWeatherWarningPanel.GREEN)) { j = 1; } int k = i - j; if (k > 0) { return -1; } else if (k < 0) { return 1; } else return 0; }

補充知識:Collections.sort多字段排序-指定排序方式-指定排序字段

看代碼吧~

1、創建需要排序的字段數組

String [] sortNameArr = {“one”, “tow”,“startDate”};

2、為每個字段執行排序規則

boolean[] isAs = {false, false, false};

3、重寫sort方法進行排序

ListUtils.sort(list, sortNameArr, isAs);

public static <E> void sort(List<E> list, final String[] sortnameArr, final boolean[] typeArr) { if (sortnameArr.length != typeArr.length) { throw new RuntimeException('屬性數組元素個數和升降序數組元素個數不相等'); } Collections.sort(list, new Comparator<E>() { public int compare(E a, E b) {int ret = 0;try { for (int i = 0; i < sortnameArr.length; i++) { ret = ListUtils.compareObject(sortnameArr[i], typeArr[i], a, b); if (0 != ret) { break; } }} catch (Exception e) { e.printStackTrace();}return ret; } }); } private static <E> int compareObject(final String sortname, final boolean isAsc, E a, E b) throws Exception { int ret; Object value1 = ListUtils.forceGetFieldValue(a, sortname); Object value2 = ListUtils.forceGetFieldValue(b, sortname); // 兩個字段都不為空進行排序 if (null != value1 && null != value2) { String str1 = value1.toString(); String str2 = value2.toString(); if (value1 instanceof Number && value2 instanceof Number) {int maxlen = Math.max(str1.length(), str2.length());str1 = ListUtils.addZero2Str((Number) value1, maxlen);str2 = ListUtils.addZero2Str((Number) value2, maxlen); } else if (value1 instanceof Date && value2 instanceof Date) { // 日期排序long time1 = ((Date) value1).getTime();long time2 = ((Date) value2).getTime();int maxlen = Long.toString(Math.max(time1, time2)).length();str1 = ListUtils.addZero2Str(time1, maxlen);str2 = ListUtils.addZero2Str(time2, maxlen); } if (isAsc) {ret = str1.compareTo(str2); } else {ret = str2.compareTo(str1); } return ret; } else if (null == value1 && null != value2) { // 比值為空 被比值大 ret = 1; } else { // 被比值為空比值打 ret = -1; } return ret; } public static String addZero2Str(Number numObj, int length) { NumberFormat nf = NumberFormat.getInstance(); // 設置是否使用分組 nf.setGroupingUsed(false); // 設置最大整數位數 nf.setMaximumIntegerDigits(length); // 設置最小整數位數 nf.setMinimumIntegerDigits(length); return nf.format(numObj); } public static Object forceGetFieldValue(Object obj, String fieldName) throws Exception { Field field = obj.getClass().getDeclaredField(fieldName); Object object = null; boolean accessible = field.isAccessible(); if (!accessible) { // 如果是private,protected修飾的屬性,需要修改為可以訪問的 field.setAccessible(true); object = field.get(obj); // 還原private,protected屬性的訪問性質 field.setAccessible(accessible); return object; } object = field.get(obj); return object; }

以上這篇java Collections 排序--多條件排序實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 新型游乐设备,360大摆锤游乐设备「诚信厂家」-山东方鑫游乐设备 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 温湿度记录纸_圆盘_横河记录纸|霍尼韦尔记录仪-广州汤米斯机电设备有限公司 | 创富网-B2B网站|供求信息网|b2b平台|专业电子商务网站 | 膜结构_ETFE膜结构_膜结构厂家_膜结构设计-深圳市烨兴智能空间技术有限公司 | 宏源科技-房地产售楼系统|线上开盘系统|售楼管理系统|线上开盘软件 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | 青州开防盗门锁-配汽车芯片钥匙-保险箱钥匙-吉祥修锁店 | 慈溪麦田广告公司,提供慈溪广告设计。 | China plate rolling machine manufacturer,cone rolling machine-Saint Fighter | 干粉砂浆设备-干粉砂浆生产线-干混-石膏-保温砂浆设备生产线-腻子粉设备厂家-国恒机械 | 元拓建材集团官方网站| 转向助力泵/水泵/发电机皮带轮生产厂家-锦州华一精工有限公司 | 写方案网_方案策划方案模板下载 事迹材料_个人事迹名人励志故事 | 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | 江苏南京多语种翻译-专业翻译公司报价-正规商务翻译机构-南京华彦翻译服务有限公司 | 生物颗粒燃烧机-生物质燃烧机-热风炉-生物颗粒蒸汽发生器-丽水市久凯能源设备有限公司 | 玄米影院| 西点培训学校_法式西点培训班_西点师培训_西点蛋糕培训-广州烘趣西点烘焙培训学院 | 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | LZ-373测厚仪-华瑞VOC气体检测仪-个人有毒气体检测仪-厂家-深圳市深博瑞仪器仪表有限公司 | 大立教育官网-一级建造师培训-二级建造师培训-造价工程师-安全工程师-监理工程师考试培训 | 石家庄救护车出租_重症转院_跨省跨境医疗转送_活动赛事医疗保障_康复出院_放弃治疗_腾康26年医疗护送转诊团队 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | 防腐储罐_塑料储罐_PE储罐厂家_淄博富邦滚塑防腐设备科技有限公司 | 知网论文检测系统入口_论文查重免费查重_中国知网论文查询_学术不端检测系统 | 实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业 | 压滤机-洗沙泥浆处理-压泥机-山东创新华一环境工程有限公司 | OLChemim试剂-ABsciex耗材-广州市自力色谱科仪有限公司 | 冻干机(冷冻干燥机)_小型|实验型|食品真空冷冻干燥机-松源 | TPE_TPE热塑性弹性体_TPE原料价格_TPE材料厂家-惠州市中塑王塑胶制品公司- 中塑王塑胶制品有限公司 | 优考试_免费在线考试系统_培训考试系统_题库系统_组卷答题系统_匡优考试 | 大连海岛旅游网>>大连旅游,大连海岛游,旅游景点攻略,海岛旅游官网 | 苏州防水公司_厂房屋面外墙防水_地下室卫生间防水堵漏-苏州伊诺尔防水工程有限公司 | 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 酒水灌装机-白酒灌装机-酒精果酒酱油醋灌装设备_青州惠联灌装机械 | 上海公众号开发-公众号代运营公司-做公众号的公司企业服务商-咏熠软件 | 翅片管散热器价格_钢制暖气片报价_钢制板式散热器厂家「河北冀春暖气片有限公司」 | 丁基胶边来料加工,医用活塞边角料加工,异戊二烯橡胶边来料加工-河北盛唐橡胶制品有限公司 |