2017-04-11 37 views
0

我有一堆漂浮物,让我们称之为订单。正在处理。然而,我的(测试)系统的规则是,为了验证结果,我需要顺序输出(按订单ID)顺序。高效标记结果

这意味着已被标记为准备完成(完成处理)的订单不能被标记为已完成,除非所有订单ID为<的订单已完成。

  • 订单可以以任何随机顺序
  • 订单ID是唯一的,在初始订单创建

    类订单{ INT ID的顺序分配被标记成品加工; boolean finishedProcessing = false; boolean completed = false; }

有人能提出一个有效的解决这个问题?我只能考虑创建一个HashMap(订单ID,已完成),并在每个订单完成时标记在地图中完成的订单,并确定是否允许订单完成,然后循环整个地图以查看是否所有先前订单都已标记完成。

这是错误意味着最后一部分,似乎非常低效。有没有更好的办法?

+2

为什么不能使用观察者或事件总线模型,让低阶数字订单告知高阶数字对象它可以向前移动? –

+0

为什么不跟踪最后处理的ID? – pvg

回答

2

如果id是按照创建顺序分配的,请在创建时将订单添加到Deque。然后Deque将隐含按ID排序。

每当订单标记完成时,请检查Deque中的第一个条目。如果完成,请将其从Deque中删除(或将其移至另一个)。然后再次检查Deque中的下一个(现在的第一个)条目,以防万一订单准备就绪,并根据需要重复。

不完整订单的Deque独立于任何Map,您可能需要按ID查找订单。