背景:

实际页面上  所有的分值都是按照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中时会发生覆盖现象  】

新实体完整代码:

 package com.agen.util;

 public class NewMonthPerEntity implements Comparable<NewMonthPerEntity>{

     private String monthPerId;            //月度考核Id
private String userId; //用户Id
private String userName; //用户名称
private String createDate; //考核创建时间
private double leadTotal5; //调控分值
private double leadTotal4; //考评分值
private double ownTotal4; //自评分值
private boolean ascDesc; //true升序/false降序
private String whichProperty; //需要对哪个分值排序 public String getMonthPerId() {
return monthPerId;
} public void setMonthPerId(String monthPerId) {
this.monthPerId = monthPerId;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getCreateDate() {
return createDate;
} public void setCreateDate(String createDate) {
this.createDate = createDate;
} public double getLeadTotal5() {
return leadTotal5;
}
public void setLeadTotal5(double leadTotal5) {
this.leadTotal5 = leadTotal5;
}
public double getLeadTotal4() {
return leadTotal4;
}
public void setLeadTotal4(double leadTotal4) {
this.leadTotal4 = leadTotal4;
} public double getOwnTotal4() {
return ownTotal4;
} public void setOwnTotal4(double ownTotal4) {
this.ownTotal4 = ownTotal4;
}
public boolean isAscDesc() {
return ascDesc;
} public void setAscDesc(boolean ascDesc) {
this.ascDesc = ascDesc;
} public String getWhichProperty() {
return whichProperty;
}
public void setWhichProperty(String whichProperty) {
this.whichProperty = whichProperty;
} public NewMonthPerEntity(String monthPerId, String userId, String userName,
String createDate, double leadTotal5, double leadTotal4,
double ownTotal4) {
super();
this.monthPerId = monthPerId;
this.userId = userId;
this.userName = userName;
this.createDate = createDate;
this.leadTotal5 = leadTotal5;
this.leadTotal4 = leadTotal4;
this.ownTotal4 = ownTotal4;
} public NewMonthPerEntity(String monthPerId, String userId, String userName,
String createDate, double leadTotal5, double leadTotal4,
double ownTotal4, boolean ascDesc, String whichProperty) {
super();
this.monthPerId = monthPerId;
this.userId = userId;
this.userName = userName;
this.createDate = createDate;
this.leadTotal5 = leadTotal5;
this.leadTotal4 = leadTotal4;
this.ownTotal4 = ownTotal4;
this.ascDesc = ascDesc;
this.whichProperty = whichProperty;
} //排序方法
@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;
}
} }
@RequestMapping("allMonthPer")
@ResponseBody
public TreeSet<NewMonthPerEntity> allMonthPer(HttpServletRequest request,boolean ascDesc,String whichProperty) {
//-----------------部分代码---------------------------------------------------
.
.
.
.
//原实体 得到的List
DetachedCriteria criteria = DetachedCriteria.forClass(Monthper.class);
criteria.add(Restrictions.in("userId", userIds));
List<Monthper> monthPers = monthperService.list(criteria);
//新建TreeSet 将原实体的List 对应的放置在新的实体中,放入TreeSet的时候就已经是按照传入【按照 哪个字段排序/升序或降序 】 排好顺序的
TreeSet<NewMonthPerEntity> newSet = new TreeSet<NewMonthPerEntity>();
for (Monthper monthper : monthPers) {
String totalStr = monthper.getTotalStr();
double leadTotal5 = Double.parseDouble(JSONObject.fromObject(totalStr).getString("leadTotal5"));
double leadTotal4 = Double.parseDouble(JSONObject.fromObject(totalStr).getString("leadTotal4"));
double ownTotal4 = Double.parseDouble(JSONObject.fromObject(totalStr).getString("ownTotal4")); NewMonthPerEntity entity = new NewMonthPerEntity(monthper.getMonthPerId(),monthper.getUserId(),userService.get(monthper.getUserId()).getUserName(),monthper.getCreateDate().toLocaleString(),leadTotal5,leadTotal4,ownTotal4);
entity.setAscDesc(ascDesc);//设置升序/降序
if("".equals(whichProperty) || null == whichProperty){
entity.setWhichProperty("ownTotal4");
}else{
entity.setWhichProperty(whichProperty);
} newSet.add(entity);
} return newSet;
//在前台 只需要$.each取出来 追加到页面就好
}

效果如下图:

附带 前台jsp代码

 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>考核列表</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <link href="../bootstrap/css/bootstrap.min.css" rel="stylesheet">
<script src="../js/jquery.js"></script> </head> <body> <div class="panel panel-primary">
<div class="panel-heading">
<div class="form-group">
<label class="panel-title" >月度绩效考评列表</label>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<button type="button" class="btn btn-success thisMonth">本月考核</button>
<button type="button" class="btn btn-warning userRefresh">刷新页面</button>
<c:if test="${roleGrade==0 }">
<div class="row">
<div class="col-lg-2">
<div class="input-group">
<select class="form-control dep" name="departmentId">
<option value="0">可选择所在部门</option>
</select>
</div>
</div>
<div class="col-lg-1">
<div class="input-group">
<input type="text" class="form-control us" placeholder="用户名称" >
</div>
</div>
<div class="col-lg-1">
<div class="input-group">
<input type="number" class=" form-control mon" placeholder="查询月份" >
</div>
</div>
<div class="col-lg-1">
<div class="input-group">
<button type="button" class="btn btn-default mohu ">模糊查询</button>
</div>
</div>
</div>
</c:if> </div>
</div>
<div class="panel-body">
<input type="hidden" class="operationId" value="${operationId}"/>
<input type="hidden" class="whichProperty" />
<input type="hidden" class="ascDesc"/> <table class="table text-center">
<tr class="firstTr">
<td class="active"> <input type="checkbox" id="checkAll" name="checkAll" /></td>
<td class="primary"><h4>考核月份</h4></td>
<td class="success"><h4>员工名称</h4></td>
<td class="danger"><h4>考评时间</h4></td>
<td class="warning"><h4>调控分值 <span class="glyphicon glyphicon-sort" alt="leadTotal5" style="float: right;"></span></h4></td>
<td class="info"><h4>考评分值 <span class="glyphicon glyphicon-sort" alt="leadTotal4" style="float: right;"></span></h4></td>
<td class="danger"><h4>自评分值 <span class="glyphicon glyphicon-sort" alt="ownTotal4" style="float: right;"></span></h4></td>
<td class="default"><h4>操作</h4></td>
</tr>
</table>
</div>
</div> </body> <script src="../bootstrap/js/bootstrap.min.js"></script>
<script src="../layer/layer.js"></script>
<script type="text/javascript" src="../js/UUID.js"></script>
<script type="text/javascript" src="../js/perContent/monthPerContent/allMonth.js"></script> </html>

附带 前台js代码

 function refreshAll(ascDesc,whichProperty){
$("table tbody tr").not(":first").remove();
$.ajax({url:"../monthPerCon/allMonthPer.htmls",
dataType:'json',
type:"post",
data:{ascDesc:ascDesc,whichProperty:whichProperty},
traditional:false,
success:function(data){
var temp ="";
$.each(data,function(i,d){
temp += '<tr>'
+' <td class="active"> '
+'<input type="checkbox" id="checkAll" name="checkAll" />'
+'<input type="hidden" name="monthPerId" value="'+d.monthPerId+'"/>'
+'</td>'
+'<td class="primary">'
+(new Date(d.createDate).getMonth()+"月考核")
+'</td>'
+'<td class="success">'
+'<input type="hidden" name="userId" value="'+d.userId+'"/>'
+d.userName
+'</td>'
+'<td class="danger">'
+d.createDate
+'</td>'
+'<td class="warning tips">'
+'【调控分值:'+d.leadTotal5+'】'
+'</td>'
+'<td class="info tips">'
+'【考评分值:'+d.leadTotal4+'】'
+'</td>'
+'<td class="danger tips">'
+'【自评分值:'+d.ownTotal4+'】'
+'</td>'
+'<td class="default">'
+'<a class="aClick"><i class="glyphicon glyphicon-list-alt"></i>详情</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class="Adelete"><i class="glyphicon glyphicon-trash"></i>删除</a>'
+'</td>'
+'</tr>';
$(".whichProperty").val(d.whichProperty);
$(".ascDesc").val(d.ascDesc);
});
$(".firstTr").after(temp); /*//判断 此时按那列排序 升序降序 改变图标
var whichProperty = $(".whichProperty").val();
var ascDesc = $(".ascDesc").val();
var thisSpan;
var cla = "";
whichProperty == "ownTotal4"? thisSpan = $("span").eq(2):(whichProperty == "leadTotal4"? thisSpan = $("span").eq(1) :thisSpan = $("span").eq(0));
ascDesc == "true" ? cla = "glyphicon glyphicon-sort-by-attributes" : cla="glyphicon glyphicon-sort-by-attributes-alt";
$(thisSpan).attr("class",cla);*/
}
});
} function mohu(ascDesc,whichProperty,dep,us,mon){ $("table tbody tr").not(":first").remove();
$.ajax({url:"../monthPerCon/mohuAllMonthPer.htmls",
dataType:'json',
type:"post",
data:{ascDesc:ascDesc,whichProperty:whichProperty,departmentId:dep,userName:us,month:mon},
traditional:false,
success:function(data){
var temp ="";
$.each(data,function(i,d){
temp += '<tr>'
+' <td class="active"> '
+'<input type="checkbox" id="checkAll" name="checkAll" />'
+'<input type="hidden" name="monthPerId" value="'+d.monthPerId+'"/>'
+'</td>'
+'<td class="primary">'
+(new Date(d.createDate).getMonth()+"月考核")
+'</td>'
+'<td class="success">'
+'<input type="hidden" name="userId" value="'+d.userId+'"/>'
+d.userName
+'</td>'
+'<td class="danger">'
+d.createDate
+'</td>'
+'<td class="warning tips">'
+'【调控分值:'+d.leadTotal5+'】'
+'</td>'
+'<td class="info tips">'
+'【考评分值:'+d.leadTotal4+'】'
+'</td>'
+'<td class="danger tips">'
+'【自评分值:'+d.ownTotal4+'】'
+'</td>'
+'<td class="default">'
+'<a class="aClick"><i class="glyphicon glyphicon-list-alt"></i>详情</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class="Adelete"><i class="glyphicon glyphicon-trash"></i>删除</a>'
+'</td>'
+'</tr>';
});
$(".firstTr").after(temp); }
}); } $(document).ready(function(){
refreshAll(); //升序 降序
$("span").click(function(){ var whichProperty = $(this).attr("alt");
if($(this).attr("class") == "glyphicon glyphicon-sort"){
$(this).attr("class","glyphicon glyphicon-sort-by-attributes-alt");
}else if($(this).attr("class") == "glyphicon glyphicon-sort-by-attributes-alt"){
$(this).attr("class","glyphicon glyphicon-sort-by-attributes");
}else if($(this).attr("class") == "glyphicon glyphicon-sort-by-attributes"){
$(this).attr("class","glyphicon glyphicon-sort-by-attributes-alt");
} $("span").not(this).attr("class","glyphicon glyphicon-sort");
var ascDesc = $(this).attr("class") == "glyphicon glyphicon-sort" ? false : ($(this).attr("class") == "glyphicon glyphicon-sort-by-attributes-alt" ? false : true); //判断是否模糊查询
var dep = $(".dep option:selected").val();
var us = $(".us").val();
var mon = $(".mon").val();
if(dep !="" || us !="" || mon !=""){//只要模糊查询有值
if(( parseInt(mon)<0 || parseInt(mon)>12 )){
layer.msg("月份不正确",{icon:2,time:1000});
$(".mon").val("");
}else{
mohu(ascDesc,whichProperty,dep,us,mon);
}
}else{//否则 查询
refreshAll(ascDesc,whichProperty);
} }); $(document).on("click",".aClick",function(){
var monthPerId = $(this).parents("tr").children().first().find("input:hidden").val();
location.href = "../monthPerCon/showThisMonper.htmls?monthPerId="+monthPerId;
});
$(document).on("click",".Adelete",function(){
var operationId = $(".operationId").val();//操作人的ID
var userId = $(this).parents("tr").children().eq(2).find(":hidden").val();//本条考核的人员
if(operationId != userId){
layer.msg("非本人无法删除!",{icon:2,time:2000});
}else{
var monthPerId = $(this).parents("tr").children().first().find("input:hidden").val();
var leadTotal4 = JSON.parse($(this).parents("tr").children().eq(4).find(":hidden").val()).leadTotal4;
if( !(leadTotal4 == undefined || leadTotal4=="") ){
layer.msg("经理已经考评无法删除!");
}else{
$.ajax({url:"../monthPerCon/deleteThisMonper.htmls",
dataType:'json',
type:"post",
data:{monthPerId:monthPerId},
traditional:false,
success:function(data){
if(data){
layer.msg("删除成功",{icon:1,time:2000},function(){
refreshAll();
});
}else{
layer.msg("删除失败",{icon:2,time:2000},function(){
refreshAll();
});
} }
});
}
} // location.href = "../monthPerCon/deleteThisMonper.htmls?monthPerId="+monthPerId;
}); //跳转到本月考核页面
$(".thisMonth").click(function(){
location.href = "../monthPerCon/perContent.htmls";
}); //部门
$.getJSON("../department/showAlldepartment.htmls", function(data){
if(data!=null){
var temp = "";
$.each(data,function(i,a){
temp+="<option value='"+a.departmentId+"'>"+a.departmentName+"</option>";
});
$('.dep option').first().after(temp);
}
}); //模糊查询
$(".mohu").click(function(){
var dep = $(".dep option:selected").val();
var us = $(".us").val();
var mon = $(".mon").val();
if(( parseInt(mon)<0 || parseInt(mon)>12 )){
layer.msg("月份不正确",{icon:2,time:1000});
$(".mon").val("");
}else{
mohu(false,"ownTotal4",dep,us,mon);
} }); });

【java】实体类中 按照特定的字段 进行升序/降序 排序的更多相关文章

  1. HTML中实现Table表头点击升序/降序排序

    题目:如下图,请实现表格信息的排序功能,当点击表头的属性区域,将表格信息进行排序切换功能,即第一次点击为降序排序,再一次点击进行升序排序. 姓名 力量 敏捷 智力 德鲁伊王 17 24 13 月之骑士 ...

  2. 实体类相同属性间赋值与如何判断实体类中是否所有的字段都为null

    1,实体类相同属性间赋值 /// <summary> /// 将实体2的值动态赋值给实体1(名称一样的属性进行赋值) /// </summary> /// <param ...

  3. java 实体类中日期格式转换

    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss&quo ...

  4. mysql字段有中英文,数字按照升序/降序 排序

    ORDER BY    CONVERT(name,SIGNED) ASC,    CONVERT(name USING gbk) DESC

  5. JAVA实体类不要使用基本类型,基本类型包含byte、int、short、long、float、double、char、boolean

    由于JAVA的基本类型会有默认值,例如当某个类中存在private  int age;字段时,创建这个类时,age会有默认值0.当使用age属性时,它总会有值.因此在某些情况下,便无法实现age为nu ...

  6. java实体类和json串字段名称不一致或者与map中字段名称不一致使用注解转化

    package yuanCheng; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List ...

  7. 解决SpringDataJpa实体类中属性顺序与数据库中生成字段顺序不一致的问题

    一.在application.yml配置中添加数据库根据实体类自动创建数据库表的配置(这里数据库采用MySQL数据库) jpa: database: MYSQL show-sql: true #Hib ...

  8. 尚硅谷面试第一季-11MyBatis中当实体类中的属性名和表中的字段名不一样怎么办

    问题: MyBatis中当实体类中的属性名和表中的字段名不一样 ,怎么办 ? 解决方案: 1.写sql语句时起别名 <!-- id属性:必须是接口中方法的方法名 resultType属性:必须是 ...

  9. MyBatis系列二 之 数据库列名于程序实体类中字段名称不一致

    MyBatis系列二  之   数据库列名于程序实体类中字段名称不一致 情景:当数据库中的列名与我们程序实体类中的字段名称不一致         使用ResultMap节点配置信息  在映射文件中  ...

随机推荐

  1. C高级 框架开发中红黑树结构

    引言  -- 红黑树历史 红黑树是数据结构学习中一道卡. 底层库容器中必不可少的算法. 历经各种实战运用,性能有保障. 同样红黑树不好理解, 就算理解了, 代码也不好写. 就算写了, 工程库也难构建. ...

  2. [hadoop][会装]hadoop ha模式安装

    1.简介 2.X版本后namenode支持了HA特性,使得整个文件系统的可用性更加增强. 2.安装前提 zookeeper集群,zookeeper的安装参考[hadoop][会装]zookeeper安 ...

  3. 3.Python3标准库--数据结构

    (一)enum:枚举类型 import enum ''' enum模块定义了一个提供迭代和比较功能的枚举类型.可以用这个为值创建明确定义的符号,而不是使用字面量整数或字符串 ''' 1.创建枚举 im ...

  4. winscp上传出现时间戳提示错误

    文件ngx_http_access_module.c上传成功,但是在设置权限和/或时间戳时发生错误.具体内容上图:         我们可以选择 ‘中止’,文件是可以上传成功的,就是每次都会提示这个信 ...

  5. [ python ] 反射及item系列

    反射 什么是反射? 通过字符串的形式操作对象相关属性.python中的事物都是对象: 关键方法: (1)getattr:获取属性 (2)setattr:设置属性 (3)hashattr:检测是否含有属 ...

  6. JQUERY 提取多个元素 a img 的 src href

    <div class="abc"><a href="1.html"><img src="1.jpg"/> ...

  7. C++变量类型转换

    1:int转换为CString CString str; str.Format("As string: %d", int); 2:double转换为CString CString ...

  8. LeetCode解题报告—— Search in Rotated Sorted Array & Search for a Range & Valid Sudoku

    1. Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated(轮流,循环) at so ...

  9. 急!急!急!请问win32api参数乱码如何解决!

    我想做一个QQ自动登陆,使用的QQ是2009.现在先模拟打开QQ,然后通过api调用回调函数.回调函数为一个委托方法,但是在方法中整个参数乱码,请问如何解决? 具体流程为,启动QQ,获取当前启动QQ的 ...

  10. bootstrap bootstrapvalidator插件+adjax验证使用

    1.利用bootstrap Validator表单验证进行表单验证需要如下CSS和JS. <link rel="stylesheet" type="text/css ...