[英]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.