2017-04-11 4 views
0

私はたくさんのオブジェクトを浮かべています。処理中です。しかし、私の(テスト)システムのルールは、結果を検証するためには、注文を注文ID順に並べる必要があるということです。結果に効率よくフラグを付ける

これは、そのIDよりも注文IDが<であるすべての注文が既に完了していない限り、完了(完了処理)の準備が完了している注文に完了マークを付けることができないことを意味します。

  • 注文は
  • 注文IDは一意であり、最初のオーダー作成

    クラス注文{ INT番号順に割り当てられたランダムな順序で完成した処理をフラグを立てることができます。 ブール値finishedProcessing = false; boolean completed = false; }

誰かがこの問題の効率的な解決法を提案できますか?私はHashMap(order id、completed)を作成し、各注文が完了するとマップ内で完了した注文をフラグ付けし、注文が完了してマップ全体をループしてすべての先行注文にフラグが立てられているかどうかを判断することしか考えられません完了しました。

バグが意味する最後の部分であり、非常に非効率的です。より良い方法がありますか?

+2

オブザーバーまたはイベントバスモデルを使用して、より低いオーダー番号のオーダーが上位のオーダー番号オブジェクトにそれが前進できることを伝えることができないのはなぜですか? –

+0

なぜ最後に処理されたIDを追跡するだけではないのですか? – pvg

答えて

2

作成時にIDが割り当てられている場合は、作成時にDequeに注文を追加します。 Dequeは暗黙のうちにIDで注文されます。

注文が完了とマークされるたびに、デキューの最初のエントリを確認します。完了した場合はDequeから削除します(または別の場所に移動する)。その後、複数の注文が用意されている場合に備えて、Dequeの次の(今すぐ最初の)エントリを確認し、必要に応じて繰り返します。

不完全な注文のDequeは、IDで注文を検索するのに必要なMapとは別に保持されます。

関連する問題