跳过增强for循环的一个元素

Skip one element of enhanced for loop

在处理图表时,我经常发现我需要在循环时跳过一个元素。有没有办法在循环的每个循环中调用 if 语句来做到这一点?

示例:

private void printAll(Node<T> root){
        System.err.println(toString());
        for(Node<T> node : links.values()){
            if (node == root) continue;
            node.printAll(this);
        }
}

我怀疑答案是否定的,但想确认一下。

编辑:问题是,有没有一种方法可以在不使用带有增强 for 循环的 if 语句或其他方法的情况下跳过一个已知元素来迭代数据结构。

enhanced for loops做什么:

Its simple structure allows one to simplify code by presenting for-loops that visit each element of an array/collection without explicitly expressing how one goes from element to element.

那里的关键词是each。这意味着 each and every,而不是 all but one。如果你想要 all but one(或者像 all but those meeting some criteria 这样的其他变体,你需要用条件来编码。

或者,$DEITY 禁止,构造一个 new 集合,仅包含您要处理的内容,然后 foreach 那个。这可能是一个更糟糕的想法,因为它仍然必须使用条件来构建新集合,所以你真的一无所获。

也许 nice 语法如下:

for (Node<T> node :in links.values() :where node != root)
    node.printAll(this);

(我相信 LINQ 为 Microsoft stable 提供了这个)但这只是你已经拥有的语法糖。 代码 可能更短,但您仍然会在幕后做同样的工作。