使用java中的While循环计算列表的元素

时间:2016-08-24 14:12:43

标签: java

我在URL中传递了一些参数,然后将它们添加到列表中。我的列表有5个元素的限制。因此,如果有人在URL中添加了第6个元素,列表就会忽略它。所以我试图使用计数器,但逻辑没有按预期工作。我正在使用While循环来实现此目的。因此,如果列表大小小于5,则代理商ICs否则只返回列表。

private List<IUiIntegrationDto> generateViewIntegrationReportData(ESignatureIntegrationConfig eSignConfig) throws Exception {
    int counter = 1;
    if(eSignConfig.getAdditionalAgencyCds() != null ) {

        List<String> combinedAgencyCds = new ArrayList<String>();

        for(String agencyCd : eSignConfig.getAgencyCd()) {
            combinedAgencyCds.add(agencyCd);
        }

        StringTokenizer token = new StringTokenizer(eSignConfig.getAdditionalAgencyCds().toString(), StringConstants.COMMA);
        while(token.hasMoreTokens()) {
            combinedAgencyCds.add(token.nextToken());
        }

        while(combinedAgencyCds.size() < 5) {
            counter = counter + 1;
            eSignConfig.setAgencyCd(combinedAgencyCds);
        }

    //  eSignConfig.setAgencyCd(combinedAgencyCds);
    } 
    List<IUiIntegrationDto> intgList = getUiIntegrationManager().retrieveUiIntegrationReportData(eSignConfig.getAgencyCd(), eSignConfig.getCreatedDays(),
            eSignConfig.getLob(), eSignConfig.getTransactionStatus(), eSignConfig.getAccounts(), eSignConfig.getSortKey(), eSignConfig.getSortOrder());

    return intgList;
}

如果它是正确的或者有更好的方法,我不完全确定这个逻辑。

由于

2 个答案:

答案 0 :(得分:2)

尝试使用此代码,而不是代码中的最后一次:

if(combinedAgencyCds.size() <= 5) {
   eSignConfig.setAgencyCd(combinedAgencyCds); 
} else {
   eSignConfig.setAgencyCd(combinedAgencyCds.subList(0, 5));
}

如果小于5,则将使用完整的组合列表。否则,仅使用前5个元素。

编辑:甚至更好:

eSignConfig.setAgencyCd(combinedAgencyCds.subList(0, Math.min(5, combinedAgencyCds.size())));

答案 1 :(得分:1)

好的,让我们分解您的代码目前正在做的事情。

int counter = 1;

while(combinedAgencyCds.size() < 5) {
    counter = counter + 1;
    eSignConfig.setAgencyCd(combinedAgencyCds);
}

这段代码有一些错误,我可以说出来。首先,这个循环有可能永远运行或根本不运行。因为永远不会操纵combinedAgencyCds,所以大小不会改变,而在while循环中检查的逻辑永远不会做任何事情。其次,这是一个更有效的循环,假设你不需要在while循环中使用的计数器变量,而是使用for循环。

示例语法如下:

for (int i = 0; i < combinedAgencyCds.size(); i++) {
    if (i < 5) {        
        // Do your logic here.
    }
    else {
        break; // Or handle extra values however you want.
    }
}

请注意,不需要将计数器变量显式声明为&#34; i&#34;很适合你。

现在在循环中的实际逻辑中,我不确定setAgencyCd方法的作用,但是如果它只是在eSignConfig中设置了一个列表变量,就像它一样,重复它一遍又一遍都没有做任何事情。从我在代码中看到的内容,您将设置一个具有相同值的变量5次。如果您需要更多解释,请告诉我,我将很乐意修改答案。