当从数据库查询出一列数据,需要比对各列字段的最大值或者取不为空的值时,需要遍历字段操作。
示例数据
项目 | 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