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

时间:2015-03-14 00:37:56

标签: java foreach

在处理我经常发现的图表时,我需要在循环时跳过一个元素。有没有办法在循环的每个循环中调用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语句。

1 个答案:

答案 0 :(得分:1)

enhanced for loops做了什么:

  

它的简单结构允许通过呈现访问数组/集合的每个元素的for循环来简化代码,而无需明确表示从元素到元素的方式。

关键字有each。这意味着each and every,而不是all but one。如果您需要all but one(或某些其他变体,例如all but those meeting some criteria,则需要使用条件代码进行编码。

或者,$ DEITY禁止,构建一个 new 集合,其中只包含您要处理的内容,然后foreach。这可能是一个更糟糕的想法,因为它仍然需要使用条件来构建新的集合,所以你真的什么都没有。

可能很好的语法如下:

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

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