イテレータ ソリューション:
おそらく次のようなものが必要です。
class WindowLauncherClass {
SortedSet set = null;
Iterator setIterator = null;
public WindowLauncherClass(SortedSet set) {
this.set = set; // or you can copy it if that's what you need.
}
protected void launchWindow(Object item) {
// impl
}
public void onActivityResult() {
if ( setIterator != null && setIterator.hasNext() )
{
launchWindow(setIterator.next());
}
}
public void start() {
setIterator = set.iterator();
onActivityResult();
}
}
コメントには、セットの更新に関する質問がありました。イテレータはそれを認識しますか?. 通常の答えは、アプリケーションの要件によって異なります。この場合、私はすべての情報を持っているわけではないので、推測してみます。
jdk 1.5 までは、SortedSet 実装 ( TreeSet ) が 1 つしかありませんでした。これには、フェイル ファスト イテレータがありました。
jdk 6 では、新しい実装である ConcurrentSkipListSet が登場しました。このソートされたセットの反復子は、フェイル ファストではありません。
現在表示されている要素よりも「小さい」要素をセットに追加している場合、「適切な」(フェイル ファストではない) イテレータからはそれを確認できません。現在表示されている要素よりも「大きい」要素を追加する場合は、適切な反復子によって表示されます。
最終的な解決策は、適切な変更が作成されたときにセットと反復子を実際にリセットすることです。最初に ConcurrentSkipListSet を使用すると、「より大きな」変更のみが表示され、TreeSet を使用すると、すべての更新で失敗します。
現在のものより「小さい」更新を見逃す余裕がある場合は、jdk 6.0 と ConcurrentSkipListSet を使用してください。そうでない場合は、表示したものを追跡し、新しいアイテムと非表示のアイテムで適切なセットを再構築する必要があります。