2016-05-20 6 views
0

私はPriorityQueue<SomePlayerObject>のインスタンスを持っています。 Comparatorで構成されており、equalsと矛盾する注文を課しています。これは、プレーヤーがオンラインになった時間に基づいてSomePlayerObjectを注文します。プライオリティキューからの要素をピックする条件

SomePlayerObjectは、方法:boolean isValid()を有する。

isValidがtrueを返す最初の要素(カスタムコンパレータによる)は、PriorityQueueからになります。

これは可能ですか?

答えて

2

ここで本当にうまくいくのは、isValid()まで通常のpoll()メソッドを呼び出しているだけです。それはほぼ確実にあなたがの方法であるべきですするでしょう。

Java 8でqueue.removeIf(e -> !e.isValid())と呼ぶこともできますが、以前のアプローチより効率的ではありません。

+0

しかし 'poll()'は要素をキューから削除し、 'isValid()'の状態を変更することができます。おそらく 'PriorityQueue'は最良の解決策ではありませんか?要素は、後で潜在的にアクセスできるようにキューに留まる必要があります。 – konsolas

+0

明らかにそうではありません。私はあなたが有効なものを見つけた後にあなたが無効な要素を再挿入できると思いますが、それはあなたが本当にできることです。 –

+0

ありがとう、私は他のアイデアを探します。 – konsolas

関連する問題