How to iterate a big list to make it smaller for a REST call using Java streams?(如何迭代一个大列表以使其更小以使用 Java 流进行 REST 调用?)
问题描述
我有类似这样的逻辑要分块处理.
I have logic something like this to process in chunks.
List<String> bigList = getList(); // Returns a big list of 1000 recs
int startIndex=0;
boolean entireListNotProcessed=false;
while(entireListNotProcessed) {
int endIndex = startIndex + 100;
if(endIndex > myList.size()-1) {
endIndex=myList.size()-1;
}
List<String> subList= bigList.subList(startIndex, endIndex);
//call Rest API with subList and update entireListNotProcessed flag...
}
有没有更好的方法使用 java 流进行迭代?
Is there a better way of doing this iteration using java streams?
推荐答案
你可以做类似 this answer, by使用步进创建范围,然后 subList:
You can do similar to this answer, by creating range with stepping and then subList:
int step = 100;
IntStream
.iterate(0, o -> o < bigList.size(), o -> o + step)
.mapToObj(i -> bigList.subList(i, Math.min(i + step, bigList.size()))
.forEach(subList -> callRestApi(subList));
或者你可以提取方法:
private static <T> Stream<List<T>> partition(List<T> list, int step) {
return IntStream
.iterate(0, o -> o < list.size(), o -> o + step)
.mapToObj(i -> list
.subList(i, Math.min(i + step, list.size()))
);
}
然后
partition(bigList, 100).forEach(subList -> callRestApi(subList));
这篇关于如何迭代一个大列表以使其更小以使用 Java 流进行 REST 调用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何迭代一个大列表以使其更小以使用 Java 流进行 REST 调用?
基础教程推荐
- Struts2 URL 无法访问 2022-01-01
- 存储 20 位数字的数据类型 2022-01-01
- RabbitMQ:消息保持“未确认"; 2022-01-01
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13
- 修改 void 函数的输入参数,然后读取 2022-01-01
- 如何对 Java Hashmap 中的值求和 2022-01-01
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
- 使用堆栈算法进行括号/括号匹配 2022-01-01
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
