рефакторинг java-метода при использовании нескольких операторов if - PullRequest
0 голосов
/ 05 ноября 2019

Как выполнить рефакторинг приведенного ниже кода, если используется несколько операторов if? Есть ли альтернативный способ сделать это?

    StringBuffer sb = new StringBuffer();

    if (rowData.size() > 24){
        sb.append(rowData.get(24).trim());
    }
    sb.append("|");

    if (rowData.size() > 25){
        sb.append(rowData.get(25).trim());
    }
    sb.append("|");

    if (rowData.size() > 26){
        sb.append(rowData.get(26).trim());
    }
    sb.append("|");

    if (rowData.size() > 27){
        sb.append(rowData.get(27).trim());
    }
    sb.append("|");

    if (rowData.size() > 28){
        sb.append(rowData.get(28).trim());
    }
    sb.append("|");

    if (rowData.size() > 29) {
        sb.append(rowData.get(29).trim());
    }   

1 Ответ

3 голосов
/ 05 ноября 2019

Поместив индексирование в цикл, как предложено, вы получите это

    for (int i = 24; i < 30; i++) {   
        if (rowData.size() > i){         
            sb.append(rowData.get(i).trim());
            sb.append(i <= 29 ? "|" : "");
        }
    }

В более современной версии Java также это может быть сделано:

    IntStream.range(24, 29).forEach(i ->
    {            
        if (rowData.size() > i){         
            sb.append(rowData.get(i).trim());
            sb.append(i <= 29 ? "|" : "");
        }
    });
...