嵌套循环只能一次访问X元素

时间:2018-03-21 10:31:58

标签: java for-loop nested-loops

我需要访问列表中的所有元素,但一次只能访问最多10个元素。为此我想到了一个像这样的嵌套循环:

for (int i = 0; i < 50 / 10; i++) {
    for (int k = 0; k < 10; k++) {
        paramList.addParam(xyz)
    }
    sendRequest(paramList);
}

使用这个嵌套循环,我可以访问0-49中的所有元素,并且只能访问内部循环中的10个元素。当列表只有49个元素而不是50个时,我的问题就出现了。然后我只用这个逻辑得到39个元素。我最好的想法只是访问例如最后一次迭代中的5个元素(列表大小= 45)是在循环之前打破循环。

所以我的问题是,如何访问List中未定义大小的所有元素,但内循环中最多只能访问10个元素(如果列表大小不允许10,则更少) ?

3 个答案:

答案 0 :(得分:3)

作为一个选项,您可以使用10个元素的步骤迭代外部循环:

int step = 10;
for (int i = 0; i < list.size(); i+=step) {
    for (int k = i; k < i + step && k < list.size()); k++) {
        System.out.println(list.get(k));
    }
}

答案 1 :(得分:2)

用户7说,

可以为嵌套循环添加条件

for (int i = 0; i < list.size(); i+=10) {
    for (int k = i; k < list.size() && (k-i) < 10; k++) {
        System.out.println(k);
    }
}

答案 2 :(得分:2)

我必须找到你需要的理由,用内部循环打破迭代,就像你的代码片段没有做任何有用的东西,它仍然迭代一个列表。

我看到你的逻辑需要的唯一原因是你想在10个元素之后调用一个方法,如:

for (int i = 0; i < 50 / 10; i++) {
    for (int k = 0; k < 10; k++) {
        System.out.println((i * 10) + k);
    }
    System.out.println("####");
}

这是有道理的,但不需要第二个循环,也需要一个“复杂”的代码来理解。

作为替代方案,您可以正常迭代列表并添加条件来执行该方法。它提供了更易读的代码

for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));

    if( (i + 1)%10 == 0){ //add one to not trigger this on the first iteration
        System.out.println("####");
    }
}

来自你的评论:

  

我从我的数据库中检索了多达50条记录。对于每条记录,我需要创建一个将在POST请求中发送的请求。每个POST请求可以包含10个数据请求,我每分钟只能发送5个请求(5 * 10 = 50)。因为我总是从我的数据库中获取TOP 50数据,所以我可能只得到35个条目而不是50个。要创建我的请求,我需要来自我的数据库的数据,因此我必须迭代整个列表,但只有10个1中的元素去创建1个完整的POST请求

我可以在这里看到需要,假设您有一个实例post,它有两个方法addParamsendRequest。您需要迭代列表以发送String参数:

int i = 0; 
for(String s : params){
    post.addParam(s);
    if( ++i % 10 == 0){
         post.sendRequest();
    }
}
//If the last `addParam` was not sended, we check again.
if( i % 10 != 0){
     post.sendRequest();
}

注意循环外的条件变化