代码有什么问题 - 尝试对具有相似帐户 ID 的代理进行批处理?

What is wrong with code - Trying to batch agent with similar account ID?

我正在尝试对每个客户的销售发票进行批处理。我的代理人是发票。我正在遍历每个帐户并检查每个客户有多少张发票。基于此改变批量大小。计算出的批大小似乎是正确的,但批处理没有发生,每个帐户的 batchSize 打印为 1。

LinkedHashMap<Integer, List<MyAgent>> productsWaiting = new 
LinkedHashMap<Integer, List<MyAgent>>();

for (int i = 0; i < wait.size(); i ++){

MyAgent myAgent = wait.get(i);
int id = myAgent.actNo;
if (!productsWaiting.containsKey(id)) productsWaiting.put(id, new ArrayList<MyAgent>());
productsWaiting.get(id).add(myAgent);

 }

for (int key : productsWaiting.keySet())
{
int id= key;
 batchsize= productsWaiting.get(id).size();
 batch1.set_batchSize(batchsize);

 traceln("iD: " + id  + "   batchsize    "  +  batchsize);

    for (MyAgent p:productsWaiting.get(id)) {
      
        //System.out.println(x);
        //traceln("actNo" +p.actNo  );
        batch1.set_batchSize(batchsize);
        wait.free(p);
        batch1.set_batchSize(batchsize);
                      
        traceln(batch1.batchSize);
        
        //System.out.println("Released  " +"Batch Size  " + x + "account ID-" + id);
 
    }
    
} 

   

无法根据其包含的发票更改每个帐户的批量大小。

这里有一些日志

iD: 165691   batchsize    1
iD: 120895   batchsize    1
iD: 85295   batchsize    1
iD: 5080702   batchsize    2
iD: 121437   batchsize    1
iD: 174098   batchsize    1 

在批处理块的条目上,我检查了批处理大小..

165691

batch Size    1

120895

batch Size    1

85295

batch Size    1

5080702

batch Size    1

5080702

batch Size    1

121437

batch Size    1

174098

batch Size    1

agent的每个条目的batch size都是1..请指出代码中的错误。

批处理本身发生在一个单独的事件中,而不是在循环内。因为您是从循环内部调用函数 set_batchSize(int batchSize),所以您的 Batch 块只会将此函数定义的最后一个值作为批处理大小。这就是为什么每个代理的批量大小都是 1.

函数wait.free(Agent agent)也是如此。此事件也只会在您完成调用函数以计算批量大小后发生。

所以基本上,您应该只计算队列中下一个代理的批量大小,而不是使用循环。然后你需要“等待”直到这个代理的批处理发生,然后你才能计算下一个代理的批大小。