java - 如何重构代码以避免 Java 循环中出现标签?

标签 java loops refactoring label

如何重构我的代码以删除标签及其需求? 我知道带有标签的循环是“禁止的”。但我找不到在没有标签的情况下重写它的方法。

有什么想法吗?谢谢

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 的方法,尽管看起来它还需要返回 >Stringdep 的新值。但如果您找到一种方法来做到这一点,它会更加清理您的代码。

关于java - 如何重构代码以避免 Java 循环中出现标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26762148/

相关文章:

java - 有没有办法限制 do-while 循环中的一行代码只完成一次?

C中的更改计算程序

function - 在编写小函数时避免意大利面条式代码

java - 从具有日期比较的列表中删除

java - 如何将类返回到 onPostExecute?

c# - C# 是如何受到 C++ 而非 Java 的启发的?

c - 以英文显示整数上每个数字的程序不适用于以 "0"开头的整数

javascript - JS : Refactoring Code into OOP

java - Spring Security 身份验证仅适用于一个用户名和密码

java - 将 Spring Boot 与 Angular 4 一起使用时出现 HTTP 413 错误