代码有什么问题 - 尝试对具有相似帐户 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)
也是如此。此事件也只会在您完成调用函数以计算批量大小后发生。
所以基本上,您应该只计算队列中下一个代理的批量大小,而不是使用循环。然后你需要“等待”直到这个代理的批处理发生,然后你才能计算下一个代理的批大小。
我正在尝试对每个客户的销售发票进行批处理。我的代理人是发票。我正在遍历每个帐户并检查每个客户有多少张发票。基于此改变批量大小。计算出的批大小似乎是正确的,但批处理没有发生,每个帐户的 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)
也是如此。此事件也只会在您完成调用函数以计算批量大小后发生。
所以基本上,您应该只计算队列中下一个代理的批量大小,而不是使用循环。然后你需要“等待”直到这个代理的批处理发生,然后你才能计算下一个代理的批大小。