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.作者投稿可能会经我们编辑修改或补充。