嵌套foreach循环的Java

问题描述:

for (Comment mc : relevant) { 
    for (GitItem gi : tree) { 
     bb.buildBody(gi.getHash(), mc.getBody()); 
     MutableComment mutable = commentManager.getMutableComment(mc.getId()); 
     mutable.setBody(bb.sb.toString()); 
     commentManager.update(mutable, true); 
    } 
} 

所以我做了与希望,这嵌套的foreach循环,我会从treerelevant添加第一个项目(这是GitItems的一个TreeSet),以第一个注释(这是一个评论的大小等于tree的大小)等等(在这个例子中,我有2条评论和2条)。但是现在它所做的是,它只添加树中的第二项到两个评论中的每一个。我究竟做错了什么?嵌套foreach循环的Java

+0

似乎有点过于本地化 –

+2

你应该初始化'BB '内部循环,相同的参考文件正在更新 –

+2

当前你将尝试用*每个* Comment来更新* every *'GitItem' ...以及Amit的点 –

您的内部循环总是在以上遍历所有树中的项目,因此主体被设置为所有评论的最后一个树项目。如果我理解你的权利,你要正加紧同步迭代器(以伪代码,因为我不知道你relevanttree等是什么:

Iterator<Comment> commentIter = relevant.iterator(); 
Iterator<GitItem> itemIter = tree.iterator(); 
while (commentIter.hasNext() && itemIter.hasNext()) { 
    Comment mc = commentIter.next(); 
    GitItem gi = itemIter.next(); 

    bb.buildBody(gi.getHash(), mc.getBody()); 
    MutableComment mutable = commentManager.getMutableComment(mc.getId()); 
    mutable.setBody(bb.sb.toString()); 
    commentManager.update(mutable, true); 
} 
+0

如果'related'和'tree'可以通过索引访问,然后看看邓肯琼斯的解决方案,它基本上是同样的东西,但使用索引,这可以更易读 – kiheru

+0

使用它可以将树中的第一项添加到这两个评论中 – Schadenfreude

+0

要么我是今天失明,还是我terator循环是正确的,并且应该正确地迭代树。你确定代码的其他部分是正确的吗? – kiheru