用代码块功能插入代码,请勿粘贴截图
public InternalAuditPlanElementVo reflectionFactorValueAssignment(List<InternalAuditElement> elementList) {
elementList = elementList.stream().sorted(Comparator.comparing(InternalAuditElement::getAuditMonth).reversed()).collect(Collectors.toList());
InternalAuditPlanElementVo elementVo = new InternalAuditPlanElementVo();
//根据月份交换元素位置 进行反射赋值
for (int i = 1; i <= elementList.size(); i++) {
for (int e = 0; e < elementList.size(); e++) {
InternalAuditElement element = elementList.get(i - 1);
//InternalAuditConstants.InternalAuditElementMonthState.NULL_MONTH.getCode()为字符串99
if (!InternalAuditConstants.InternalAuditElementMonthState.NULL_MONTH.getCode().equals(element.getAuditMonth())) {
int mobileIndex = Integer.parseInt(element.getAuditMonth()) - 1;
Collections.swap(elementList, i - 1, mobileIndex);
}
break;
}
}
try {
//外层月份
for (int i = 1; i <= ELEMENT_MONTH; i++) {
//内层控制要素数据的变动 每个字段 对应auditMonth 1-12 赋值了vo就进入下一条记录的赋值
for (int e = 0; e < elementList.size(); e++) {
InternalAuditElement internalAuditElement = elementList.get(i - 1);
elementVo.setElementName(internalAuditElement.getElementName());
String parameter = "auditMonth" + i;
Field auditMonth = elementVo.getClass().getDeclaredField(parameter);
//如果取出来的数据库数据 不是99 并且字段对应的是当前遍历的auditMonth 1-12 则赋值对应要素状态
if (!InternalAuditConstants.InternalAuditElementMonthState.NULL_MONTH.getCode().equals(internalAuditElement.getAuditMonth())
&& auditMonth.getName().equals(parameter)) {
auditMonth.set(elementVo, internalAuditElement.getElementState());
} else {
//否则都为99
auditMonth.set(elementVo, InternalAuditConstants.InternalAuditElementMonthState.NULL_MONTH.getCode());
}
//处理完毕进入下一个auditMonth月份 给vo赋值
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return elementVo;
}
运行结果及报错内容
有bug,会导致1-12对应的下标不正确
我想要达到的结果
集合下标保持12个不变,没有勾选的月份为99,勾选的月份为对应的1-12,也要对应集合的下标的位置 比如1月对应下标0