java - 大 ArrayList 分解成批次
问题描述
我有一个大小为 30K 的列表,我将它们分成 1000 个块,因为我需要使用子列表中的 id 来获取休息端点并做一些断言。我正在使用 jersey 客户端与其他端点交谈
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;
}
有没有更好的方法来拆分原始列表并获取子列表
解决方案
该原则被称为“不要重复自己”。您的代码行有很多重复(for ga1
, ga2
, ec.
其他提示: - 不要将变量声明为ArrayList
,将其声明为您关心的接口,List
. - 变量Ids
应ids
符合 Java 标准。- 您可以使用subList
而无需从中构建新ArrayList
的。
这段代码表明了这一点。
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);
}
}
推荐阅读
- javascript - angular 9 使用动态元信息进行社交分享,但不使用 SSR
- blazor - Blazor 客户端获取请求
- c++ - 表达式“b=(bx)&x”是什么意思?
- .net-core - 在 .NET Core 3.1 Nano Server Docker 映像上安装 .NET 运行时
- c# - 如何通过变量C#插入包含'的字符串
- scylla - 用于查询数据的 scyllabd ui 访问
- python - 用 Python 解析 ISO 日期时间+微秒格式
- python - 如何创建两个具有不同python版本的virtualenv?
- google-chrome - HAProxy 使用旧的后端
- python - 熊猫适用于滚动多列输出