如何检查图中节点是否已存在?foreach循环实现失效求助
问题分析与解决方案
你的代码逻辑存在一个关键问题:每次循环都会无条件重置returnVal的值,哪怕已经找到了匹配的节点,只要后续有不匹配的节点,returnVal就会被重新设为false,导致最终结果永远不对。
修正后的代码(基础版)
我们可以在找到匹配节点后立刻标记结果并跳出循环,避免后续不必要的遍历:
boolean returnVal = false; for (Node node : displayGraph) { if (node.getId().equals(n.getId())) { returnVal = true; break; // 找到匹配项后直接终止循环 } } return returnVal;
或者更高效的写法——找到匹配节点时直接返回true,循环结束后返回false:
for (Node node : displayGraph) { if (node.getId().equals(n.getId())) { return true; } } return false;
更简洁的Java 8+写法
如果你的项目使用Java 8及以上版本,可以用Stream API一行解决,代码可读性更强:
return displayGraph.stream().anyMatch(node -> node.getId().equals(n.getId()));
为什么原代码失效?
举个例子:假设displayGraph里有3个节点,第一个节点ID匹配,后面两个不匹配。原代码执行时:
- 第一个节点匹配:
returnVal = true - 第二个节点不匹配:
returnVal = false - 第三个节点不匹配:
returnVal = false
最终返回false,完全不符合预期。去掉else分支或者找到后立刻跳出,就能避免这个问题。
内容的提问来源于stack exchange,提问作者Samasha
相关产品推荐
相关产品推荐

