簡體   English   中英

如何刪除此java代碼中的代碼重復

[英]How to remove code duplication in this java code

在 2 種不同的方法中使用相同的 for-each 循環,有沒有辦法減少代碼重復?

第一個代碼

for (AjaxControlBean controlBean : requestData.getControls()) {
    if (StringUtils.isAnyBlank(controlBean.getId(), controlBean.getName()) || "repeat".equalsIgnoreCase(controlBean.getType())) 
    {
        continue;
    }
    FormInstanceControl control = formInstance.getControl(controlBean.getId());
    if (control == null) {
       control = new FormInstanceControl();
       control.setFormInstance(formInstance);
       control.setControlId(controlBean.getId());
       formInstance.putControl(control);
    }
    if (controlBean.getValues() != null) {
       if (control.getData() != null)
          control.getData().clear();
       else
          control.setData(new ArrayList<FormInstanceData>());

       for (String value : controlBean.getValues()) {
           FormInstanceData data = new FormInstanceData();
           data.setControl(control);
           data.setType(FormInstanceData.TYPE_TEXT);
           data.setText(value);
           control.getData().add(data);
       }
    }
}

第二個代碼

for (AjaxControlBean controlBean : requestData.getControls()) {
     if (StringUtils.isAnyBlank(controlBean.getId(), controlBean.getName()) || "repeat".equalsIgnoreCase(controlBean.getType())) {
         continue;
     }
     FormInstanceControl control = formInstance.getControl(controlBean.getId());
     if (control == null) {
        control = new FormInstanceControl();
        control.setFormInstance(formInstance);
        control.setControlId(controlBean.getId());
        formInstance.putControl(control);
     }
     if (controlBean.getValues() != null) {
        if (control.getData() != null) {
            control.getData().clear();
        } 
        else 
        {
            control.setData(new ArrayList<FormInstanceData>());
        }
        int i = 0;
        for (String value : controlBean.getValues()) {
            FormInstanceData data = new FormInstanceData();
            data.setControl(control);
            data.setType(FormInstanceData.TYPE_TEXT);
            data.setText(value);
            data.setIdx(i++);
            control.getData().add(data);
        }
    }
}

它唯一的區別是 data.setIdx(i++); 如果我能做些什么來減少行數,請告訴我

您可以FormInstanceControl出一個將FormInstanceControlAjaxControlBean作為參數的方法。 然后你就得到了你需要的一切:

private void addBeanData( FormInstanceControl control, AjaxControlBean controlBean) {
    int i = 0;
    for (String value : controlBean.getValues()) {
        FormInstanceData data = new FormInstanceData();
        data.setControl(control);
        data.setType(FormInstanceData.TYPE_TEXT);
        data.setText(value);
        data.setIdx(i++);
        control.getData().add(data);
     }
}

這假設,如果設置了 Idx,第一個片段不會中斷,即使它沒有在原始代碼中完成。

用法:在使用 for 循環之前,只需執行addBeanData( control, controlBean );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM