月凉凉 2022-12-06 10:38 采纳率: 84.2%
浏览 39
已结题

请问一个集合排序的问题,集合大小保持12不变,没有勾选的月份字段为99,勾选的月份为对应的1-12,也要对应集合的下标的位置 比如1月对应下标0,如何完美排序。

img

用代码块功能插入代码,请勿粘贴截图
   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

  • 写回答

1条回答 默认 最新

  • pzzhao 2022-12-06 12:09
    关注

    为啥不在element里面加一个字段标识实际是哪个月份

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月6日
  • 修改了问题 12月6日
  • 修改了问题 12月6日
  • 修改了问题 12月6日
  • 展开全部

悬赏问题

  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)