Die Iterator-Lösung:
Wahrscheinlich sollten Sie etwas in dieser Art haben:
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();
}
}
In den Kommentaren erschien die Frage nach Aktualisierungen der Menge. Wird der Iterator sie sehen? Die normale Antwort lautet: Das hängt von den Anforderungen der Anwendung ab. In diesem Fall habe ich nicht alle Informationen und ich werde versuchen, zu erraten.
-
Bis jdk 1.5 gab es nur eine SortedSet-Implementierung (TreeSet). Diese hatte einen Fail Fast Iterator.
-
in jdk 6 erschien eine neue Implementierung: ConcurrentSkipListSet. Der Iterator für diese sortierte Menge ist nicht ausfallsicher.
Wenn Sie ein Element in die Menge hinzufügen, das "kleiner" ist als das aktuell angezeigte Element, dann können Sie es mit einem "guten" (nicht ausfallsicheren) Iterator ohnehin nicht sehen. Wenn Sie ein Element hinzufügen, das "größer" ist als das aktuell angezeigte Element, können Sie es mit einem geeigneten Iterator sehen.
Die endgültige Lösung besteht darin, die Menge und den Iterator zurückzusetzen, wenn eine richtige Änderung vorgenommen wird. Wenn Sie ein ConcurrentSkipListSet verwenden, sehen Sie zunächst nur die "größeren" Änderungen, und wenn Sie ein TreeSet verwenden, schlagen Sie bei jeder Aktualisierung fehl.
Wenn Sie es sich leisten können, Updates zu verpassen, die "kleiner" sind als die aktuellen, dann entscheiden Sie sich für jdk 6.0 und ConcurrentSkipListSet. Wenn nicht, als Sie haben, um zu verfolgen, was Sie angezeigt und eine richtige Menge mit neuen Elementen und nicht angezeigten Elemente neu zu erstellen.