首页 > 解决方案 > 测试迭代器的第四个对象 - Java

问题描述

是否可以在迭代器中断言第四个对象的唯一值?

我已经看到人们使用迭代器遍历列表的示例,但我不想取出 index 0to中保存的对象2,而只是在 index 3...

我知道我总是可以做到.next().next().next()的,但这看起来有点……傻。有什么方法可以让我做一些.next(4)直接的事情吗?

标签: javalistiterator

解决方案


迭代器不适用于索引,它们不知道最后一项出现在哪个索引处。它们的唯一目的是遍历元素直到到达终点。

这意味着,如果你想使用第四个元素,你必须调用Iterator::next()四次。可能会发生迭代器中只有 3 个或更少元素的情况,因此您必须检查Iterator::hasNext(),否则当没有更多元素并且您next()再次调用时,NoSuchElementException会抛出 。


或者,从 Java-8 开始,您可以使用Iterator::forEachRemaining(Consumer<? super E> action)为每个剩余元素执行给定操作的方法。此外,您需要对数组使用技巧来避免lambda 表达式中有效的最终变量约束。可悲的是,这个方法不接受BiConsumer<T,U>作为参数来消耗不仅元素而且它的索引 - 这就是为什么这个技巧。

List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
int index[] = new int[]{0};

// Prints 4 and 8
Iterator<Integer> iterator = list.iterator();
iterator.forEachRemaining(i -> {
    if ((index[0]+1)%4 == 0) {
        // Here you work both with the element `i` and its index `index[0]`
        System.out.println(i);     
    }
    index[0]++;
});

推荐阅读