java反射实现传入任意字段对list进行排序、分页

虾米哥 阅读:760 2021-04-01 11:01:47 评论:0

1.反射实现–推荐

//orderField字段名小驼峰 
//get方法名 
String methodName = "get" + orderField.substring(0, 1).toUpperCase().concat(orderField.substring(1)); 
  Comparator<DatStatRiskTableVO> comparing = Comparator.comparing((a) -> { 
            Class<DatStatRiskTableVO> c = DatStatRiskTableVO.class; 
            String invoke = null; 
            try { 
                Method method = c.getMethod(methodName); 
                invoke = method.invoke(a).toString(); 
            } catch (Exception e) { 
                e.printStackTrace(); 
            } 
            return invoke; 
        }); 
        if (StringUtils.isNotBlank(orderType) && "desc".equalsIgnoreCase(orderType)) { 
            comparing = comparing.reversed(); 
        } 
        //排序 
        values.sort(comparing); 
        if (pageSize == null) { 
            pageSize = 20; 
        } 
        if (pageNo == null) { 
            pageNo = 1; 
        } 
        //分页功能 
       values.stream().skip((pageNo - 1) * pageSize).limit(pageSize).collect(Collectors.toList()) 

2.switch实现–不建议 海量代码构建Comparator排序字段比较多

        Comparator<DatStatRiskTableVO> comparing = Comparator.comparing(DatStatRiskTableVO::getSharpeRatio0); 
        switch (orderField) { 
            case "sharpeRatio0": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getSharpeRatio0); 
                break; 
            case "sharpeRatio1": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getSharpeRatio1); 
                break; 
            case "sharpeRatio2": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getSharpeRatio2); 
                break; 
            case "sharpeRatio3": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getSharpeRatio3); 
                break; 
            case "profitRatioJh0": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getProfitRatioJh0); 
                break; 
            case "profitRatioJh1": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getProfitRatioJh1); 
                break; 
            case "profitRatioJh2": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getProfitRatioJh2); 
                break; 
            case "profitRatioJh3": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getProfitRatioJh3); 
                break; 
            case "profitRatioSs0": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getProfitRatioSs0); 
                break; 
            case "profitRatioSs1": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getProfitRatioSs1); 
                break; 
            case "profitRatioSs2": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getProfitRatioSs2); 
                break; 
            case "profitRatioSs3": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getProfitRatioSs3); 
                break; 
            case "profitPRatio0": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getProfitPRatio0); 
                break; 
            case "profitPRatio1": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getProfitPRatio1); 
                break; 
            case "profitPRatio2": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getProfitPRatio2); 
                break; 
            case "profitPRatio3": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getProfitPRatio3); 
                break; 
            case "profitOverRatioJh0": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getProfitOverRatioJh0); 
                break; 
            case "profitOverRatioJh1": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getProfitOverRatioJh1); 
                break; 
            case "profitOverRatioJh2": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getProfitOverRatioJh2); 
                break; 
            case "profitOverRatioJh3": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getProfitOverRatioJh3); 
                break; 
            case "volatility0": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getVolatility0); 
                break; 
            case "volatility1": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getVolatility1); 
                break; 
            case "volatility2": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getVolatility2); 
                break; 
            case "volatility3": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getVolatility3); 
                break; 
            case "testValue0": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getTestValue0); 
                break; 
            case "testValue1": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getTestValue1); 
                break; 
            case "testValue2": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getTestValue2); 
                break; 
            case "testValue3": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getTestValue3); 
                break; 
            case "dataLen0": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getDataLen0); 
                break; 
            case "dataLen1": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getDataLen1); 
                break; 
            case "dataLen2": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getDataLen2); 
                break; 
            case "dataLen3": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getDataLen3); 
                break; 
            case "dataLenRatio0": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getDataLenRatio0); 
                break; 
            case "dataLenRatio1": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getDataLenRatio1); 
                break; 
            case "dataLenRatio2": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getDataLenRatio2); 
                break; 
            case "dataLenRatio3": 
                comparing = Comparator.comparing(DatStatRiskTableVO::getDataLenRatio3); 
                break; 
            default: 
                break; 
        } 
         if (StringUtils.isNotBlank(orderType) && "desc".equalsIgnoreCase(orderType)) { 
            comparing = comparing.reversed(); 
        } 
        values.sort(comparing); 
        if (pageSize == null) { 
            pageSize = 20; 
        } 
        if (pageNo == null) { 
            pageNo = 1; 
        } 
        values.stream().skip((pageNo - 1) * pageSize).limit(pageSize).collect(Collectors.toList()) 
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号