嵌套循环一次只能访问 X 个元素
Nested loop only access X elements at once
我需要访问列表的所有元素,但一次最多只能访问 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,则更少) ?
作为一个选项,您可以使用 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));
}
}
如 user7 所说,您可以在嵌套循环中添加条件
for (int i = 0; i < list.size(); i+=10) {
for (int k = i; k < list.size() && (k-i) < 10; k++) {
System.out.println(k);
}
}
我必须找到满足您需求的原因,用内部循环中断迭代,就像您的代码片段没有做任何有用的事情,它仍然在迭代列表。
我看到您需要逻辑的唯一原因是,如果您想在 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("####");
}
这很有意义,但是不需要第二个循环,并且还提供了一个 "complex" 代码来理解。
作为替代方法,您可以正常迭代一个列表并添加一个条件来执行该方法。它提供了更具可读性的代码
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("####");
}
}
来自您的评论:
I retrieve up to 50 records from my database. For each record I need to create a request which will be send in a POST request. Each POST request can contain 10 data requests and I can only send 5 of those request per minute (5*10=50). Since I always fetch TOP 50 data from my database, it can happen that I only get 35 entries instead of 50. To create my requests, I need that data from my database and therefore I have to iterate the whole list, but only ever 10 elements in 1 go to create 1 full POST request
我可以看到这里的需求,假设您有一个实例 post
,它有两个方法 addParam
和 sendRequest
。您需要迭代列表以发送 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();
}
注意循环外的条件变化
我需要访问列表的所有元素,但一次最多只能访问 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,则更少) ?
作为一个选项,您可以使用 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));
}
}
如 user7 所说,您可以在嵌套循环中添加条件
for (int i = 0; i < list.size(); i+=10) {
for (int k = i; k < list.size() && (k-i) < 10; k++) {
System.out.println(k);
}
}
我必须找到满足您需求的原因,用内部循环中断迭代,就像您的代码片段没有做任何有用的事情,它仍然在迭代列表。
我看到您需要逻辑的唯一原因是,如果您想在 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("####");
}
这很有意义,但是不需要第二个循环,并且还提供了一个 "complex" 代码来理解。
作为替代方法,您可以正常迭代一个列表并添加一个条件来执行该方法。它提供了更具可读性的代码
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("####");
}
}
来自您的评论:
I retrieve up to 50 records from my database. For each record I need to create a request which will be send in a POST request. Each POST request can contain 10 data requests and I can only send 5 of those request per minute (5*10=50). Since I always fetch TOP 50 data from my database, it can happen that I only get 35 entries instead of 50. To create my requests, I need that data from my database and therefore I have to iterate the whole list, but only ever 10 elements in 1 go to create 1 full POST request
我可以看到这里的需求,假设您有一个实例 post
,它有两个方法 addParam
和 sendRequest
。您需要迭代列表以发送 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();
}
注意循环外的条件变化