Java 大型ArrayList分解为多个批次

Java 大型ArrayList分解为多个批次,java,list,java-8,Java,List,Java 8,我有一个大小为30K的列表,我将它们分成1000块,因为我需要使用子列表中的ID来获取rest端点并执行一些断言。我正在使用jersey客户端与rest端点通信 ArrayList<String> ga1 = new ArrayList<>(Ids.subList(1,1000)); ArrayList<String> ga2 = new ArrayList<>(Ids.subList(1001,2000)); ArrayList<Strin

我有一个大小为30K的列表,我将它们分成1000块,因为我需要使用子列表中的ID来获取rest端点并执行一些断言。我正在使用jersey客户端与rest端点通信

ArrayList<String> ga1 = new ArrayList<>(Ids.subList(1,1000));
ArrayList<String> ga2 = new ArrayList<>(Ids.subList(1001,2000));
ArrayList<String> ga3 = new ArrayList<>(Ids.subList(2001,3000));
ArrayList<String> ga4 = new ArrayList<>(Ids.subList(3001,4000));
...
ArrayList<String> ga30 = new ArrayList<>(Ids.subList(29001,sizeOfTheOriginalList));

checkSubList(ga1);
{
    Assertions;
}

checkSubList(ga30);
{
    Assertions;
}
ArrayList ga1=新的ArrayList(id.subList(11000));
ArrayList ga2=新的ArrayList(ID.子列表(10012000));
ArrayList ga3=新的ArrayList(id.subList(20013000));
ArrayList ga4=新的ArrayList(ID.子列表(30014000));
...
ArrayList ga30=新的ArrayList(ID.子列表(29001,sizeOfTheOriginalList));
检查子列表(ga1);
{
断言;
}
检查子列表(ga30);
{
断言;
}
是否有更好的方法拆分原始列表并获得子列表?原则是“不要重复自己”。您的代码行有很多重复(对于
ga1
ga2
,ec)

其他提示: -不要将变量声明为
ArrayList
,将其声明为您关心的接口,
List
。 -根据Java标准,变量
Ids
应该是
Ids
。 -您可以使用
子列表
,而无需从中构造新的
数组列表

这段代码表明

import java.util.*;
import java.util.stream.*;

public class A {
    public static void main(String[] args) {
        int upperLimit = 30000;
        // Create ids in next line just to illustrate  a list of 30000 items
        List<String> ids = IntStream.range(0, upperLimit).mapToObj(x -> "" + x).collect(Collectors.toList());

        int step = 1000;
        for (int i = 0; i < upperLimit; i += step) {
            List<String> ga = ids.subList(i, i + step);
            checkSubList(ga);
        }
    }

    private static void checkSubList(List<String> ga) {
        //  implement this as you'd like
        System.out.println(ga);
    }
}
import java.util.*;
导入java.util.stream.*;
公共A类{
公共静态void main(字符串[]args){
int上限=30000;
//在下一行中创建ID只是为了说明30000个项目的列表
List id=IntStream.range(0,上限).mapToObj(x->“”+x).collect(Collectors.toList());
int步长=1000;
对于(int i=0;i
使用循环?和列表?避免在使用循环时忽略第一个元素或每个块。仅供参考:Java索引是以零为基础的,并且是上排它的,因此跳过每个块的第一个值。使用子列表时,更改为
子列表(01000)
子列表(10002000)
子列表(20003000)