在处理我经常发现的图表时,我需要在循环时跳过一个元素。有没有办法在循环的每个循环中调用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语句。
答案 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稳定提供了这个),但这只是你已经拥有的语法糖。 代码可能更短,但你仍然会在幕后做同样的工作。