Ich habe eine Reihe von Objekten herumschweben, nennen wir sie Bestellungen. Verarbeitet werden. Die Regel meines (Test-) Systems ist jedoch, dass ich zur Ausgabe der Ergebnisse die Ausgabe in sequentieller Reihenfolge (nach Auftrags-ID) benötige.Effizient Ergebnisse anzeigen
Dies bedeutet, dass ein Auftrag, der markiert wurde, dass er fertig ist (abgeschlossene Bearbeitung), nicht als abgeschlossen markiert werden kann, es sei denn, alle Aufträge mit Auftrags-IDs < sind bereits ausgefüllt.
- Aufträge können fertige Verarbeitung in jeder beliebigen Reihenfolge
Reihenfolge ids einzigartig und zugeordnet sind in der Reihenfolge der anfänglichen Auftragserstellung
Klasse Ordnung { int id gekennzeichnet werden; Boolean finishedProcessing = false; Boolescher Abschluss = false; }
Kann jemand eine effiziente Lösung für dieses Problem vorschlagen? Ich kann nur daran denken, eine HashMap (Bestell-ID, abgeschlossen) zu erstellen und eine Bestellung in der Karte zu kennzeichnen, sobald die Bestellung abgeschlossen ist, und festzustellen, ob eine Bestellung abgeschlossen werden kann. Anschließend wird die gesamte Karte durchlaufen, um zu sehen, ob alle vorhergehenden Bestellungen markiert wurden abgeschlossen.
Es ist der letzte Teil, der Bugs bedeutet, scheint sehr ineffizient. Gibt es einen besseren Weg?
Warum können Sie kein Observer- oder Event-Bus-Modell verwenden, bei dem die Aufträge mit der niedrigeren Bestellnummer das Objekt mit der höheren Bestellnummer informieren, das es weiterleiten kann? –
Warum verfolgen Sie nicht einfach die letzte verarbeitete ID? – pvg