2016-05-20 9 views
0

Ich habe eine Instanz von PriorityQueue<SomePlayerObject>. Es wurde mit einer Comparator konstruiert, die eine Anordnung auferlegt, die mit equals inkonsistent ist: sie ordert SomePlayerObject basierend auf der Zeit, zu der der Spieler online war.Elemente aus der Prioritätswarteschlange auswählen, die den Kriterien entsprechen

SomePlayerObject hat eine Methode: boolean isValid().

Ich möchte poll() von der PriorityQueue das erste Element (nach dem benutzerdefinierten Komparator), die die Kriterien, die isValid erfüllt wahr zurückgibt.

Ist das möglich?

Antwort

2

Die einzige Sache, die Sie hier wirklich vernünftig tun können, ist, rufen Sie einfach die normale poll() Methode, bis es. Das ist fast sicher die Art und Weise, wie Sie tun sollten.

Sie könnten queue.removeIf(e -> !e.isValid()) in Java 8 nennen, aber das wird nicht effizienter als der vorherige Ansatz sein.

+0

Aber 'poll()' entfernt Elemente aus der Warteschlange und der Status von 'isValid()' kann sich ändern. Vielleicht ist 'PriorityQueue' nicht die beste Lösung? Das Element muss in der Warteschlange bleiben, um später möglicherweise darauf zuzugreifen. – konsolas

+0

Offensichtlich nicht. Ich nehme an, Sie könnten die ungültigen Elemente wieder einfügen, nachdem Sie eine gültige gefunden haben, aber das ist das Beste, was Sie wirklich tun können. –

+0

Danke, ich werde dann nach anderen Ideen suchen. – konsolas