迭代器解决方案:
你可能应该有这样的东西:
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 )。这有一个快速失败的迭代器。
在 jdk 6 中出现了一个新的实现:ConcurrentSkipListSet。这个排序集的迭代器不是一个快速失败的迭代器。
如果您将一个元素添加到集合中,该元素比当前显示的元素“小”,那么您将无法通过“好”(不是快速失败)迭代器看到它。如果您要添加一个比当前显示的元素“更大”的元素,您将通过适当的迭代器看到它。
最终的解决方案是在创建适当的更改时实际重置集合和迭代器。最初使用 ConcurrentSkipListSet 时,您只会看到“更大”的更改,而使用 TreeSet 时,您将在每次更新时失败。
如果您愿意错过比当前更新“更小”的更新,请选择 jdk 6.0 和 ConcurrentSkipListSet。如果不是这样,您将不得不跟踪您显示的内容并使用新项目和未显示的项目重建适当的集合。