2017-01-10 43 views
0

我试图扩大使用硒GWT树,我与代码增强Java代码能够更有效

for (int i = 0; i < elem.size(); i++) { 
if (!elem.get(i).isExpanded() || !elem.get(i).isLeaf()) { 
    elem.get(i).toggleExpand(); 
} 
for (int j = 0; j < elem.get(i).getChildren().size(); j++) { 
    if (!elem.get(i).getChildren().get(j).isExpanded() || 
         !elem.get(i).getChildren().get(j).isLeaf()) { 
    elem.get(i).getChildren().get(j).toggleExpand(); 
    } 
    for (int k = 0; k < elem.get(i).getChildren().get(j).getChildren().size(); k++) { 
    if (!elem.get(i).getChildren().get(j).getChildren().get(k).isExpanded() || 
       !elem.get(i).getChildren().get(j).getChildren().get(k).isLeaf()) { 
    elem.get(i).getChildren().get(j).getChildren().get(k).toggleExpand(); 
    }..... 
    } 
} 
} 

我的问题是如何提高代码或如何把在递归方法成功地做了?

+1

这可能应该继续[codereview.se]。 – shmosel

+0

你只需要谷歌'如何使用递归在java'.and当你学会如何使用它,将它应用到你的代码,如果你失败了,那么你可以发布一个问题,我们可以帮助你 – Null

+0

以何种方式高效:资源(即CPU,内存等)的利用率?开发效率?修的? ... – Thomas

回答

0

无法读取的代码。

尝试是这样的:

for (int i = 0; i < elem.size(); i++) { 
    if (!elem.get(i).isExpanded()) { 
    elem.get(i).toggleExpand(); 
    } 
    // I don't know what this method returns; no time to research for you 
    List<Element> children = elem.get(i).getChildren(); 
    for (int j = 0; j < children.size(); j++) { 
     // don't know what you call it; must be a void method of some kind 
     yourMethodName(children.get(i)); 
    } 
} 
1

为了让代码更易读也有一些事情可以做(:

重用方法的结果,例如说的elem.get(i)或使用扩展的换环路(如果elem等支持,):

for (int i = 0; i < elem.size(); i++) { 
    ElementClass element = elem.get(i); 
    if (!element.isExpanded() || !element.isLeaf()) { 
    element.toggleExpand(); 
    } 

    ... 
} 

此外因为你似乎为元素做同样的,它是你的孩子ç乌尔德提供一种方法,如:

public void expandIfNeeded(ElementClass element) { 
    if (!element.isExpanded() || !element.isLeaf()) { 
    element.toggleExpand(); 
    } 
} 

然后你循环可能看起来像这样:

for (int i = 0; i < elem.size(); i++) { 
    ElementClass element = elem.get(i); 
    expandIfNeeded(element); 

    ... //handle children here and call the same method for those (could also be using recursion) 
} 

此外,如果您不需要索引ielem是迭代的,你可以使用扩展为:

for (ElementClass element : elem) { 
    expandIfNeeded(element); 

    ... //handle children here and call the same method for those (could also be using recursion) 
} 

当然递归的,并会使其更具可读性,尤其是如果你不知道树的深度:

//I'm assuming "elem" is a List<ElementClass> here 
public void expandElements(List<ElementClass> elem) { 
    for (ElementClass element : elem) { 
    expandIfNeeded(element); 
    expandElements(element.getChildren()); 
    } 
} 
0

您可以通过使用以下代码递归地切换元素。

public static void toggleElement(Element elem){ 

     if(elem.isExpand() || elem.isLeaf()){ 
      return; 
     }else{ 
      elem.toggledExpand(); 
     } 
     List<Element> children=elem.getChildren(); 
     for (int i = 0; i < children.size(); i++) { 
      toggleElement(children.get(i)); 
     } 
    } 

希望它能解决您的问题。