今天在进行外部接口联调时,接口对接人说他们的接口一次最多只能查询20个编码的数据,多了就会timeout。然后我就需要分批调用他们的接口,一组20组数据。
刚开始想用递归,但是组长说循环就可以了。然后自己就在那想,,想了二十分钟才写出来,还写的贼丑。。。 - - 丶 后来又搜了下别人的,写的真好,记录一下
回来了自己重新写一遍
public class BatchCall {
private static final Integer SIZE_5 = 5;
@Test
public void test1() {
List<Integer> list = new ArrayList<>();
for ( int i = 0; i < 123; i++ ) {
// 这实际有一个自动装箱的过程 Integer.valueOf(i);
list.add(i);
}
int startIndex;
int endIndex;
List<Integer> subList = new ArrayList<>();
for (int i = 0; i < list.size() / SIZE_5 + 1 ; i++) {
startIndex = i * SIZE_5;
endIndex = Math.min(startIndex + SIZE_5, list.size());
subList = list.subList(startIndex, endIndex);
if (subList.size() > 0) {
System.out.println(subList);
}
}
}
}
我一直想的是通过在for循环里面控制i的值,试了好多次才搞出来
@Test
public void test2() {
List list = new ArrayList<>();
for ( int i = 0; i < 123; i++ ) {
list.add(i);
}
List subList = new ArrayList<>();
for ( int i = 0; i < list.size(); ) {
if ( list.size() - i > SIZE_5) {
subList = list.subList(i, i + SIZE_5);
System.out.println(subList);
i = i + SIZE_5;
} else {
subList = list.subList(i, list.size() );
System.out.println(subList);
i = list.size();
}
}
}
还是人家的巧妙,用i作为控制循环的次数,容易理解,思路还清晰。