背景:

  实际页面上  所有的分值都是按照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"}

【java】实体类中 按照特定的字段 进行升序/降序 排序

 

现在 需要按照 其中的 几种分值  进行升序/降序的排序操作

 

解决方法:

【因为不是按照原实体的中的字段进行排序,因此需要新建一个实体,将原实体中有用的字段和需要使用的值从字段中抽离出来 在新实体中设置成字段,如果需要进行排序的字段是原实体中就存在的,那就不需要新建实体了】

重点关注:

【java】实体类中 按照特定的字段 进行升序/降序 排序

 

实现 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 }
View Code

相关文章: