简体   繁体   English

如何删除此java代码中的代码重复

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

Using the same for-each loop inside 2 different method, is there any way to reduce code duplication here?在 2 种不同的方法中使用相同的 for-each 循环,有没有办法减少代码重复?

1st code第一个代码

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);
       }
    }
}

2nd code第二个代码

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);
        }
    }
}

the only difference it has is the data.setIdx(i++);它唯一的区别是 data.setIdx(i++); Please let me know if there is anything i can do to reduce number of lines如果我能做些什么来减少行数,请告诉我

You could factor out a method that takes a FormInstanceControl and a AjaxControlBean as arguments.您可以FormInstanceControl出一个将FormInstanceControlAjaxControlBean作为参数的方法。 Then you've got all you need:然后你就得到了你需要的一切:

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);
     }
}

This assumes, the first snippet doesn't break if the Idx is set, even if it's not done there in the original code.这假设,如果设置了 Idx,第一个片段不会中断,即使它没有在原始代码中完成。

Usage: Where before you had the for-loops, you just do addBeanData( control, controlBean );用法:在使用 for 循环之前,只需执行addBeanData( control, controlBean );

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM