背景:
实际页面上 所有的分值都是按照JSON格式存储在一个字符串中 存储在同一个字段中:
{"ownPTotal":"10>0","ownOTotal":"8>0","ownTotal1":"18","ownTotal2":"80","ownTotal3":"20","ownTotal4":"118","leadTotal1":"20","leadTotal2":"80","leadTotal3":"20","leadTotal4":"120","chiefCheck1":"","chiefCheck2":"","leadTotal5":"140"}
现在 需要按照 其中的 几种分值 进行升序/降序的排序操作
解决方法:
【因为不是按照原实体的中的字段进行排序,因此需要新建一个实体,将原实体中有用的字段和需要使用的值从字段中抽离出来 在新实体中设置成字段,如果需要进行排序的字段是原实体中就存在的,那就不需要新建实体了】
重点关注:
实现 Comparable接口需要实现的比较方法 这里动态比较 是按照 1.哪个字段进行排序 2.升序/降序
//排序方法 @Override public int compareTo(NewMonthPerEntity o) { double a1 = this.whichProperty.equals("leadTotal5") ? this.leadTotal5 : (this.whichProperty.equals("leadTotal4") ? this.leadTotal4 :(this.whichProperty.equals("ownTotal4") ? this.ownTotal4 :this.ownTotal4)); double a2 = o.whichProperty.equals("leadTotal5") ? o.leadTotal5 : (o.whichProperty.equals("leadTotal4") ? o.leadTotal4 :(o.whichProperty.equals("ownTotal4") ? o.ownTotal4 :o.ownTotal4)); if(this.ascDesc){//若是升序 return a1 > a2 ? 1 : -1; }else{ return a1 > a2 ? -1 : 1; } }
【注意:这里 return a1 > a2 ? 1 : -1;并没有写成 return a1 > a2 ? 1 :(a1==a2 ? 0 :-1); 这个样子,是因为如果在比较的时候判定两个相等 ,那在放入TreeSet中时会发生覆盖现象 】
新实体完整代码:
1 package com.agen.util; 2 3 public class NewMonthPerEntity implements Comparable<NewMonthPerEntity>{ 4 5 private String monthPerId; //月度考核Id 6 private String userId; //用户Id 7 private String userName; //用户名称 8 private String createDate; //考核创建时间 9 private double leadTotal5; //调控分值 10 private double leadTotal4; //考评分值 11 private double ownTotal4; //自评分值 12 private boolean ascDesc; //true升序/false降序 13 private String whichProperty; //需要对哪个分值排序 14 15 16 17 18 19 public String getMonthPerId() { 20 return monthPerId; 21 } 22 23 public void setMonthPerId(String monthPerId) { 24 this.monthPerId = monthPerId; 25 } 26 public String getUserId() { 27 return userId; 28 } 29 public void setUserId(String userId) { 30 this.userId = userId; 31 } 32 public String getUserName() { 33 return userName; 34 } 35 public void setUserName(String userName) { 36 this.userName = userName; 37 } 38 public String getCreateDate() { 39 return createDate; 40 } 41 42 public void setCreateDate(String createDate) { 43 this.createDate = createDate; 44 } 45 46 public double getLeadTotal5() { 47 return leadTotal5; 48 } 49 public void setLeadTotal5(double leadTotal5) { 50 this.leadTotal5 = leadTotal5; 51 } 52 public double getLeadTotal4() { 53 return leadTotal4; 54 } 55 public void setLeadTotal4(double leadTotal4) { 56 this.leadTotal4 = leadTotal4; 57 } 58 59 public double getOwnTotal4() { 60 return ownTotal4; 61 } 62 63 public void setOwnTotal4(double ownTotal4) { 64 this.ownTotal4 = ownTotal4; 65 } 66 public boolean isAscDesc() { 67 return ascDesc; 68 } 69 70 public void setAscDesc(boolean ascDesc) { 71 this.ascDesc = ascDesc; 72 } 73 74 public String getWhichProperty() { 75 return whichProperty; 76 } 77 public void setWhichProperty(String whichProperty) { 78 this.whichProperty = whichProperty; 79 } 80 81 public NewMonthPerEntity(String monthPerId, String userId, String userName, 82 String createDate, double leadTotal5, double leadTotal4, 83 double ownTotal4) { 84 super(); 85 this.monthPerId = monthPerId; 86 this.userId = userId; 87 this.userName = userName; 88 this.createDate = createDate; 89 this.leadTotal5 = leadTotal5; 90 this.leadTotal4 = leadTotal4; 91 this.ownTotal4 = ownTotal4; 92 } 93 94 95 96 97 98 public NewMonthPerEntity(String monthPerId, String userId, String userName, 99 String createDate, double leadTotal5, double leadTotal4, 100 double ownTotal4, boolean ascDesc, String whichProperty) { 101 super(); 102 this.monthPerId = monthPerId; 103 this.userId = userId; 104 this.userName = userName; 105 this.createDate = createDate; 106 this.leadTotal5 = leadTotal5; 107 this.leadTotal4 = leadTotal4; 108 this.ownTotal4 = ownTotal4; 109 this.ascDesc = ascDesc; 110 this.whichProperty = whichProperty; 111 } 112 113 114 115 116 117 118 //排序方法 119 @Override 120 public int compareTo(NewMonthPerEntity o) { 121 double a1 = this.whichProperty.equals("leadTotal5") ? this.leadTotal5 : (this.whichProperty.equals("leadTotal4") ? this.leadTotal4 :(this.whichProperty.equals("ownTotal4") ? this.ownTotal4 :this.ownTotal4)); 122 double a2 = o.whichProperty.equals("leadTotal5") ? o.leadTotal5 : (o.whichProperty.equals("leadTotal4") ? o.leadTotal4 :(o.whichProperty.equals("ownTotal4") ? o.ownTotal4 :o.ownTotal4)); 123 if(this.ascDesc){//若是升序 124 return a1 > a2 ? 1 : -1; 125 }else{ 126 return a1 > a2 ? -1 : 1; 127 } 128 } 129 130 131 132 133 134 }