簡體   English   中英

增強Java代碼以提高效率

[英]enhancing java code to be more efficient

我正在嘗試使用硒擴展GWT樹,並且我成功地使用了該代碼

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();
   }.....
  }
 }
}

我的問題是如何增強該代碼或如何放入遞歸方法?

為了使代碼更具可讀性,您可以做一些事情(:

重用方法結果,例如elem.get(i)結果,或使用擴展的for循環(如果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)
}

另外,如果您不需要索引i並且elem是可迭代的,則可以將擴展名用於:

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() );
  }
}

無法讀取的代碼。

嘗試這樣的事情:

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));
  }
}

您可以使用以下代碼來遞歸切換元素。

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));
        }
    }

希望它能解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM