我试图重构此代码只有一个return语句,但我似乎无法弄清楚如何。我正在搜索树中的特定节点。树中的每个节点都可以有子节点。任何方向都将不胜感激
private TreeNode getDefaultNode(List list, String supervisingGroupName){
for (int i = 0; i < list.size(); i++){
TreeNode tempNode = (TreeNode) list.get(i);
OSGroup temp = (OSGroup) tempNode.getNodeBusinessObject();
if (supervisingGroupName.equals(temp.getName())){
return tempNode;
}
else {
TreeNode node = getDefaultNode(tempNode.getChildren(), supervisingGroupName);
if (node != null){
return node;
}
}
}
return null;
}
答案 0 :(得分:3)
您可以使用break
关键字突破for循环:
private TreeNode getDefaultNode(List list, String supervisingGroupName){
TreeNode node = null;
for (int i = 0; i < list.size(); i++){
node = (TreeNode) list.get(i);
OSGroup temp = (OSGroup) node.getNodeBusinessObject();
if (supervisingGroupName.equals(temp.getName())){
break;
} else {
node = getDefaultNode(tempNode.getChildren(), supervisingGroupName);
if (node != null){
break;
}
}
}
return node;
}
通过这种方式,您可以重构为单个return语句,尽管这对我来说似乎已经不再清楚了。在重构之前,您的代码没有任何问题。
答案 1 :(得分:0)
您可以这样做:
private TreeNode getDefaultNode(List list, String supervisingGroupName){
TreeNode node = null;
for (int i = 0; i < list.size(); i++){
TreeNode tempNode = (TreeNode) list.get(i);
OSGroup temp = (OSGroup) tempNode.getNodeBusinessObject();
if (supervisingGroupName.equals(temp.getName())){
node = tempNode;
break;
}else {
node = getDefaultNode(tempNode.getChildren(), supervisingGroupName);
if (node != null){
break;
}
}
}
return node;
}
答案 2 :(得分:0)
我不建议一次回归;初步检查以查看名称是否匹配是否有意义并且清楚,并且最终的null返回自身很好。我会改变你的代码,通过消除else
来减少其明显的复杂性 - 返回之后,不需要在else子句中放入后面的内容,因为当然只有当返回时它才会发生没有发生。我还建议使用一个类型列表,以便您可以使用“for each”循环而不是计数循环进行迭代:
private TreeNode getNodeByName(List<TreeNode> nodes, String name) {
for (TreeNode node: nodes) {
OSGroup group = (OSGroup) node.getNodeBusinessObject();
if (name.equals(group.getName())){
return node;
}
TreeNode child = getNodeByName(node.getChildren(), name);
if (child != null) {
return child;
}
}
return null;
}
你会看到我也做了很多重命名;我认为这些名称使代码更加清晰。