多字段属性排序

  1. 排序问题
    排序问题是最为常见的问题,但是同时支持多个字段属性排序,也是很常见,本节只针对单个属性进行排序而言,而非支持多个属性同时排序,这个在这里就不做过多的介绍。

  2. 需求
    可以支持多个属性字段属性排序

  3. 代码

import java.text.DecimalFormat;

/**
 * User:    ysl
 * Date:   2017/1/2
 * Time:   16:39
 */
public class OperationDetailStatisticsRow implements Comparable {

    private String sortName = "invokedCount";        //排序字段
    private String updown="up";          //升序还是降序

    private long invokedCount;      // 调用次数
    private long successCount;      // 成功次数
    private long validCount;        // 有效次数
    private long inputCount;        // 输入记录数
    private long outputCount;       // 输出记录数
    private String outputRate;      // 输出有效比
    private String validRate;       // 调用有效比例
    private String email;           // 用户邮箱
    private String company;         // 服务名称


    public OperationDetailStatisticsRow() {
    }



    public OperationDetailStatisticsRow(long invokedCount, long successCount, long validCount,
                                        long inputCount, long outputCount, String email,
                                        String company,String sortName,String updown) {
        DecimalFormat df = new DecimalFormat("##.00");
        this.sortName = sortName;
        this.updown = updown;
        this.invokedCount = invokedCount;
        this.successCount = successCount;
        this.validCount = validCount;
        this.inputCount = inputCount;
        this.outputCount = outputCount;
        this.email = email;
        this.company = company;
        if(invokedCount>0)
        {
            double result =  validCount*100/invokedCount;
            if(result>0)
            {
                this.validRate = df.format(result)+"%";
            }else{
                this.validRate = "0%";
            }

        }else {
            this.validRate = "0%";
        }
        if(inputCount>0)
        {
            double result = outputCount*100/inputCount;
            if(result>0)
            {
                this.outputRate =  df.format(result)+"%";
            }else{
                this.outputRate = "0%";
            }

        }else{
            this.outputRate = "0%";
        }
    }

    @Override
    public int compareTo(Object o) {

        int ret = 0;
        switch (sortName)
        {
            case "invokedCount":
                ret = (int)(this.getInvokedCount()- ((OperationDetailStatisticsRow)o).getInvokedCount());
                break;
            case "successCount":
                ret = (int)(this.getSuccessCount()- ((OperationDetailStatisticsRow)o).getSuccessCount());

                break;
            case "validCount":
                ret = (int)(this.getValidCount()- ((OperationDetailStatisticsRow)o).getValidCount());
                break;
            case "inputCount":
                ret = (int)(this.getInputCount()- ((OperationDetailStatisticsRow)o).getInputCount());
                break;
            case "outputCount":
                ret = (int)(this.getOutputCount() - ((OperationDetailStatisticsRow)o).getOutputCount());
                break;
            case "outputRate":
                String s1 = this.getOutputRate();
                String s2 = ((OperationDetailStatisticsRow)o).getOutputRate();
                double number1 = Double.valueOf(s1.substring(0, s1.lastIndexOf("%")));
                double number2 = Double.valueOf(s2.substring(0,s2.lastIndexOf("%")));
                // ret = this.getOutputRate().toString().compareTo(((OperationStatisticsRow)o).getOutputRate().toString());
                ret = number1 >= number2?1:-1;
                break;
            case "validRate":
                String s3 = this.getValidRate();
                String s4 = ((OperationDetailStatisticsRow)o).getValidRate();
                double number3 = Double.valueOf(s3.substring(0, s3.lastIndexOf("%")));
                double number4 = Double.valueOf(s4.substring(0,s4.lastIndexOf("%")));
                ret = number3 > number4?1:-1;
                //ret = this.getValidRate().toString().compareTo(((OperationStatisticsRow) o).getValidRate().toString());
                break;
            default:
                break;

        }
        if("down".equals(updown))
        {
            ret = -ret;
        }
        return  ret;
    }

    public long getInvokedCount() {
        return invokedCount;
    }

    public void setInvokedCount(long invokedCount) {
        this.invokedCount = invokedCount;
    }

    public long getSuccessCount() {
        return successCount;
    }

    public void setSuccessCount(long successCount) {
        this.successCount = successCount;
    }

    public long getValidCount() {
        return validCount;
    }

    public void setValidCount(long validCount) {
        this.validCount = validCount;
    }

    public long getInputCount() {
        return inputCount;
    }

    public void setInputCount(long inputCount) {
        this.inputCount = inputCount;
    }

    public long getOutputCount() {
        return outputCount;
    }

    public void setOutputCount(long outputCount) {
        this.outputCount = outputCount;
    }

    public String getOutputRate() {
        return outputRate;
    }

    public void setOutputRate(String outputRate) {
        this.outputRate = outputRate;
    }

    public String getValidRate() {
        return validRate;
    }

    public void setValidRate(String validRate) {
        this.validRate = validRate;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    @Override
    public String toString() {
        return "OperationDetailStatisticsRow{" +
                "invokedCount=" + invokedCount +
                ", successCount=" + successCount +
                ", validCount=" + validCount +
                ", inputCount=" + inputCount +
                ", outputCount=" + outputCount +
                ", outputRate='" + outputRate + '\'' +
                ", validRate='" + validRate + '\'' +
                ", email='" + email + '\'' +
                ", company='" + company + '\'' +
                '}';
    }
}
List<OperationStatisticsRow> operationStatisticsRowList = new ArrayList<OperationStatisticsRow>();
.....................................
 OperationStatisticsRow osr = new OperationStatisticsRow(activeUserCount,invokedCount,successCount, validCount,inputCount,outputCount,serviceId,sort,asc);
 .....................................
........................
 Collections.sort(operationStatisticsRowList);
........................

4.总结
仅支持多个字段单个属性排序,对于多个字段同时排序,需另外寻求出路。求大神指点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值