java - 在对每个块调用方法之前,如何将列表分成块?
问题描述
我有一个List
对象Java
:
ArrayList<myObj> objs = generateObjs();
我有一个负责进一步发送对象的方法,该方法将上面的列表作为参数:
sendObjectsFurther(objs)
我想拆分列表objs
,以便可以在一组五个元素中发送更多对象。
最好的方法是什么?
我想过实现这样的事情:
public void sendSliced(List objs) {
ArrayList<myObj> tempList = new ArrayList()<>;
for (int i = 0; i < objs.size(); i++) {
tempList.add(objs.get(i));
if (i % 5 == 0) {
sendObjectsFurther(tempList);
tempList.clear();
}
}
}
但我认为它不会涵盖所有边缘情况,你能帮我吗?谢谢!
解决方案
您可以为此使用Java 8 Stream API。
List<myObj> objs = generateObjs();
int chunkSize = 5;
AtomicInteger counter = new AtomicInteger();
Collection<List<myObj>> result = objs.stream()
.collect(Collectors.groupingBy(it -> counter.getAndIncrement() / chunkSize))
.values();
for (myObj chunk: result){
sendObjectsFurther(tempList);
}
此外,类名应以大写字母开头。
推荐阅读
- javascript - 寻找一种更好的方法来映射对象数组并返回 id 匹配的特定键
- javascript - 阻止键盘从按钮按下弹出
- r - 如何根据三列删除重复项,但我使用 R 保留特定列中编号最高的行?
- java - 在Activity中保存ArrayList
- kubernetes-ingress - 访问在 Kubernetes 集群上使用 PingIdentity devops 部署的 Pingfederate 控制台时出现内部服务器错误
- flutter - 未选择 DropDownButton 项目
- node.js - 如何使用 Nodejs 将通行证保存到 Google Pay?
- amazon-cognito - Cognito 多租户用户池
- reactjs - 如何直接从 VSCode 运行和调试 React 应用程序?
- javascript - NextJS:如果不满足查询,如何转到另一个页面