2017-04-11 41 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查找訂單。