当从数据库查询出一列数据,需要比对各列字段的最大值或者取不为空的值时,需要遍历字段操作。
示例数据
项目 | 1月成交数量 | 2月成交数量 | 3月成交数量 | 4月成交数量 |
---|---|---|---|---|
电脑 | 15 | 14 | 10 | 19 |
手机 | 22 | 35 | 19 | |
导管 | 31 | 100 | 14 | 18 |
对应实体类
@Data
public class ProVo {// 项目private String proName;// 1月成交数量private String value1;// 2月成交数量private String value2;// 3月成交数量private String value3;// 4月成交数量private String value4;
}
1、取各项月份成交数量最大值
private void getMaxValueList(List<ProVo> projecValueList) throws IllegalAccessException {// 遍历每条项目记录for (ProVo proVo : projecValueList) {BigDecimal maxValue = BigDecimal.ZERO; // 最大成交数量// 遍历对象中的字段for (Field mixField : proVo.getClass().getDeclaredFields()) {// 表示反射对象是否抑制java语言访问mixField.setAccessible(true);// 值不为空,且字段名包含【value】的字段才参与比较if (mixField.getName().contains("value")&& mixField.get(proVo) != null) {BigDecimal value = new BigDecimal(mixField.get(proVo).toString());// 如果当前的数量比当前保存的大就替换if (maxValue.compareTo(value) < 0) {maxValue = value;}}}}}
执行结果
电脑:19
手机:35
导管:100
2、取各项最新月份成交数量
private void getNewValueList(List<ProVo> projecValueList) throws IllegalAccessException {// 遍历每条项目记录for (ProVo proVo : projecValueList) {BigDecimal maxValue = BigDecimal.ZERO; // 最大成交数量// 遍历对象中的字段for (Field mixField : proVo.getClass().getDeclaredFields()) {// 表示反射对象是否抑制java语言访问mixField.setAccessible(true);// 值不为空,且字段名包含【value】的字段才参与比较if (mixField.getName().contains("value")&& mixField.get(proVo) != null) {BigDecimal value = new BigDecimal(mixField.get(proVo).toString());// 如果不为空就替换maxValue = value; }}}}
执行结果
电脑:19
手机:19
导管:18