如何重构我的代码以删除标签及其需要? 我知道带标签的循环是"禁止"。但是我找不到一种方法来重写这个没有标签的方法。
有什么想法吗?感谢
private List<myList> sortLinks(SegmentType s, Set<myList> LinkSet) {
List<myList> LinkList = new LinkedList<myList>();
String dep = s.getDep().toString();
mainLoop: for (int index = 0; !LinkSet.isEmpty(); index++) {
for (Iterator<myList> iterator = LinkSet.iterator(); iterator.hasNext(); ) {
myList link = iterator.next();
if (link.getLegDep().toString().equals(dep)) {
iterator.remove();
link.setLine(s.getLineCode());
link.setNb(s.getNb());
link.setSuff(s.getSuff());
link.setIndex(index);
linkList.add(link);
dep = link.getDest().toString();
continue mainLoop;
}
}
return Collections.emptyList();
}
return linkList;
}
答案 0 :(得分:2)
您可能需要boolean
。我不完全理解你的代码试图完成什么,但看起来内循环试图找到一个&#34;依赖&#34;某种?如果是这种情况,请为boolean
depedencyFound
命名;如果我真的猜错了,你可以称之为别的东西。无论如何,这样的事情:
private List<myList> sortLinks(SegmentType s, Set<myList> LinkSet) {
List<myList> LinkList = new LinkedList<myList>();
String dep = s.getDep().toString();
for (int index = 0; !LinkSet.isEmpty(); index++) {
boolean dependencyFound = false;
for (Iterator<myList> iterator = LinkSet.iterator(); iterator.hasNext(); ) {
myList link = iterator.next();
if (link.getLegDep().toString().equals(dep)) {
iterator.remove();
link.setLine(s.getLineCode());
link.setNb(s.getNb());
link.setSuff(s.getSuff());
link.setIndex(index);
linkList.add(link);
dep = link.getDest().toString();
dependencyFound = true;
break;
}
}
if (!dependencyFound) {
return Collections.emptyList();
}
}
return linkList;
}
如果你将变量命名为正确,那么它将非常清楚地说明发生了什么。在这里,你寻找依赖;如果你找不到,你会返回一个空列表;如果你这样做,那么你再次遍历主循环。
P.S。一旦你完成了这一点,那么采用整个内部循环并将其移动到返回boolean
的方法可能相当容易,尽管看起来它还需要返回{{1使用String
的新值。但是如果你找到了这样做的方法,它将会更清理你的代码。
答案 1 :(得分:1)
实际上,eurythmia的答案是正确的。 您可以使用布尔值继续这样:
private List<myList> sortLinks(SegmentType s, Set<myList> LinkSet) {
List<myList> LinkList = new LinkedList<myList>();
String dep = s.getDep().toString();
for (int index = 0; !LinkSet.isEmpty(); index++) {
for (Iterator<myList> iterator = LinkSet.iterator(); iterator.hasNext(); ) {
myList link = iterator.next();
boolean toContinue = false;
if (link.getLegDep().toString().equals(dep)) {
iterator.remove();
link.setLine(s.getLineCode());
link.setNb(s.getNb());
link.setSuff(s.getSuff());
link.setIndex(index);
linkList.add(link);
dep = link.getDest().toString();
toContinue = true;
break; // this breaks inner loop
}
}
if(toContinue) {
continue; // this continues main loop without executing the 'return'
}
return Collections.emptyList();
}
return linkList;
}
答案 2 :(得分:-1)
因为continue
位于内循环的末尾,所以只需使用break
即可开始主循环的下一次迭代。