首页 > 解决方案 > 在对每个块调用方法之前,如何将列表分成块?

问题描述

我有一个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();
        }         
    }
}

但我认为它不会涵盖所有边缘情况,你能帮我吗?谢谢!

标签: javaalgorithmlist

解决方案


您可以为此使用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);
}

此外,类名应以大写字母开头。


推荐阅读