【发布时间】:2020-04-13 16:45:59
【问题描述】:
我需要获取公共 API 返回的所有成员的列表。
问题是我不知道任何 Id,但我知道第一个 Id 在 500000000 之后开始,最后一个 Id 大约在 570000000 左右。经过检查,我知道这些 Id 是生成的时间戳,但我没有任何其他信息。
所以我唯一的解决办法就是自己去获取它们。
这是我写的:
private List<List<Long>> getFinalList() {
return chunkArrayList(getInitList(), 100);
}
private List<Long> getInitList() {
List<Long> idList = new ArrayList<>();
for (long i = 500000000L; i < 570000000L; i++) {
idList.add(i);
}
return idList;
}
private List<List<Long>> chunkArrayList(List<Long> listToChunk, int chunkSize) {
AtomicInteger counter = new AtomicInteger();
return new ArrayList<>(listToChunk.stream().collect(Collectors.groupingBy(l -> counter.getAndIncrement() / chunkSize)).values());
}
注意:我必须将我的列表分成更小的列表,以便将它们分成多个 API 调用。
我的主要问题是,这段代码给我返回了一个内存不足的异常,这是不稳定的。
我怎样才能做到这样的过程,同时尽可能提高效率并避免这些内存问题?
【问题讨论】:
标签: java list java-8 java-stream out-of-memory