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

Java 跳过增强for循环的一个元素,java,foreach,Java,Foreach,在处理图形时,我经常发现循环时需要跳过一个元素。有没有一种方法可以做到这一点,而不用在循环的每个周期中调用if语句 例如: private void printAll(Node<T> root){ System.err.println(toString()); for(Node<T> node : links.values()){ if (node == root) continue; nod

在处理图形时,我经常发现循环时需要跳过一个元素。有没有一种方法可以做到这一点,而不用在循环的每个周期中调用if语句

例如:

private void printAll(Node<T> root){
        System.err.println(toString());
        for(Node<T> node : links.values()){
            if (node == root) continue;
            node.printAll(this);
        }
}
private void printAll(节点根){
System.err.println(toString());
对于(节点:links.values()){
如果(node==root)继续;
node.printAll(这个);
}
}
我怀疑答案是否定的,但我想确认一下

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

怎么办:

它的简单结构使我们能够简化代码,方法是为访问数组/集合中的每个元素的循环呈现,而不显式地表示元素之间的关系

这里的关键字是
每个
。这意味着
每一个
,而不是
所有,只有一个
。如果您希望
除一个之外的所有变量
(或其他变量,如
除满足某些条件的变量外的所有变量
),则需要使用条件编码

或者,$Dedity Problem,构建一个只包含您想要处理的内容的新集合,然后
foreach
。这可能是一个更糟糕的想法,因为它仍然需要使用条件来构建新集合,所以您实际上什么也得不到

也许有这样的语法会更好:

for (Node<T> node :in links.values() :where node != root)
    node.printAll(this);
for(节点:在links.values()中:其中节点!=根)
node.printAll(这个);

(我相信LINQ为Microsoft stable提供了这一功能),但这只是对您现有功能的语法补充。代码可能较短,但您仍在暗中进行相同的工作。

为什么需要确认这一点……请尝试一下。如果(node.equals(root))可以在正确实现equals()的情况下工作我猜?@Don我怎么能试一下?我怎么能试一下,如果不使用if语句跳过一个元素,就没有其他方法可以做到这一点呢?@Wonhee是的,但你仍然在使用if语句。我清楚地了解增强for循环是如何工作的。因此,你根本没有解决真正的问题。@MichaelHobbs,如果你仔细阅读,我认为没有
关键字:每个
部分都涵盖了这一点。这是一种直截了当的方式,表示“不,这是不可能的”(当然,唐本可以把它说得更清楚).每一个都意味着每个,不是所有,而是一个。如果你想要除一之外的所有,你需要为此编写代码,或者,$Deaty Forbird,构建一个只包含你想要处理的内容的新集合,然后
foreach
。@Paxdiablo谢谢你,这基本上就是我所想但想确认的。我已经多次重复了这个模式,并且想确定没有更好的方法。如果你提交你的评论作为答案,我会接受。@Michael,我可以修改一下这个,因为我的评论只不过是一点额外的解释,我不需要代表:-)