如何重构我的代码以删除标签及其需求? 我知道带有标签的循环是“禁止的”。但我找不到在没有标签的情况下重写它的方法。
有什么想法吗?谢谢
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;
}
最佳答案
您可能需要一个 boolean 值
。我不完全理解你的代码想要完成什么,但看起来内部循环正在试图找到某种“依赖关系”?如果是这样,我会将 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;
}
如果你正确命名变量,就会很清楚发生了什么。在这里,你寻找依赖;如果没有找到,则返回一个空列表;如果这样做,那么您将再次迭代主循环。
附注完成此操作后,就可以相当容易地获取整个内部循环并将其移动到返回 boolean
的方法,尽管看起来它还需要返回 >String
为 dep
的新值。但如果您找到一种方法来做到这一点,它会更加清理您的代码。
关于java - 如何重构代码以避免 Java 循环中出现标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26762148/