我需要访问列表中的所有元素,但一次只能访问最多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,则更少) ?
答案 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)
可以为嵌套循环添加条件
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
,它有两个方法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();
}
注意循环外的条件变化