gpt4 book ai didi

lambda - 为什么 iterator.forEachRemaining 不删除消费者 lambda 中的元素?

转载 作者:行者123 更新时间:2023-12-04 01:51:16 25 4
gpt4 key购买 nike

让我们看一下这个例子:

public class ListIteratorTest {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("element1");
list.add("element2");
list.add("element3");
list.add("element4");

ListIterator<String> iterator = list.listIterator();
}
}

现在,这工作正常:
    // prints elements out, and then appropriately removes one after another
while (iterator.hasNext()){
System.out.println(iterator.next());
iterator.remove();
}

虽然这会引发 IllegalStateException:
        // throws IllegalStateException, why?
iterator.forEachRemaining(n -> {
System.out.println(n);
iterator.remove();
});

我的问题很简短:为什么?

最佳答案

感谢@studro 更新。请参阅下面的评论。

API documentation状态:

The behavior of an iterator is unspecified if the underlying collection is modified while the iteration is in progress in any way other than by calling this method.



似乎“未指定的行为”部分也适用于此内部迭代。

当然, forEachRemaining 的文档表明该行为等同于
while (hasNext())
action.accept(next());

如果 action::accept确实调用 iterator.remove()上面的代码片段不应抛出任何异常(如果 remove 是受支持的操作)。这可能是一个文档错误。

关于lambda - 为什么 iterator.forEachRemaining 不删除消费者 lambda 中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29210510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com