首页 > 解决方案 > 如何从另一个类访问 ListIterator.previous()

问题描述

我在“统计”类中有以下迭代

for (Number num : history) {
    // I do stuff with num here
    // ... and, occasionally want to read the previous value
} // for

在我的“历史”类中,我有一个 ListIterator(而不是一个 Iterator,因为我也想倒退)。

   @Override
    public ListIterator<Number> iterator() {
       //System.out.println("In ITERATOR");
        ListIterator<Number> it = new ListIterator<Number>() {

            private int currentIndex = 0;

            @Override
            public boolean hasNext() {
                return currentIndex < gethistorySize() && spins.get(currentIndex) != null;
            }

            @Override
            public boolean hasPrevious() {
                return currentIndex > 0;
            }

            @Override
            public Number next() {
                return spins.get(currentIndex++);
            }

            @Override
            public Number previous() {
                if(hasPrevious()) {
                    return spins.get(currentIndex -1);
                }
                return null;
            }

            @Override
            public int previousIndex() {
                return currentIndex -1;

            }

            @Override
            public int nextIndex() {
                return currentIndex +1;
            }


            // The following functions are not implemented as we don't need them for this application
            @Override
            public void remove() {
                throw new UnsupportedOperationException();
            }

            @Override
            public void set(Number n) {
                throw new UnsupportedOperationException();
            }

            @Override
            public void add(Number n) {
                throw new UnsupportedOperationException();
            }

        };
        return it;
    }

...但是当我从 Statistics 类中迭代 Numbers 时,我不知道如何获得前一个元素。

本质上,我想遍历 Numbers,但偶尔会得到前一个 Number(在移过它之后)。

当然,我可以存储它,但似乎我应该能够调用 ListIterator.previous(),但我不确定该怎么做?

有任何想法吗?

G

标签: javalistiterator

解决方案


你不能使用foreach循环。您需要显式使用迭代器,然后可以调用它的previous()方法。

例如

for (ListIterator<Number> itr = history.iterator() ; itr.hasNext() ; ) {
    itr.previous();
}

或使用while循环,因此看起来不那么乱码

ListIterator<Number> itr = history.iterator();
while(itr.hasNext()) {
    itr.previous();
}

推荐阅读