java - 如何避免在 Java 中重复 for 循环?

标签 java loops methods refactoring

我有一个工作正常的代码,但它看起来太大,因为它有重复的代码行,有人可以帮我缩短它吗?

public void writeToFile(String file)
{
    try
    {
            PrintWriter pWrite = new PrintWriter(file);
            pWriter.println("[Auto data]");
            for (Auto line : autoMap.values())
            {
                if (line instanceof Auto) 
                {
                    String getLine = line.writeData(file);
                    pWrite.println(getLine); 
                }
            }
            pWriter.println();
            pWriter.println("[Nature data]"); 
            for (Nature line : natureMap.values())
            {
                if (line instanceof Nature) 
                {
                    String getLine = line.writeData(file);
                    pWrite.println(getLine); 
                }
            }
            pWriter.println();
            pWriter.println("[Sport data]");
            for (Sport line : sportMap.values())
            {
                if (line instanceof Sport) 
                {
                    String getLine = line.writeData(file);
                    pWrite.println(getLine); 
                }
            } 
            pWriter.println();
            pWriter.println("[Animal data]");
            for (Animal line : animalMap.values())
            {
                if (line instanceof Animal) 
                {
                    String getLine = line.writeData(file);
                    pWrite.println(getLine); 
                }
            }
            pWrite.close();
    }
    // catch block omitted
}
writeData 方法示例体育类 :
public class Sport
{
     // codes omitted

    public String writeData(String file)
    {
        return title + type + cost + location;
    }
    // codes omitted
}
正如您所注意到的,在写入文件时,for 循环对于按顺序分割数据是必要的,但是这样做会使代码变得更长且重复,我想不出一种有效的方法来缩短它。

最佳答案

确保 Nature , Sport , 和 Animal都实现了一个接口(interface),例如:

public interface Writable {
    public String writeData(String file);
}
并且由于每个 Map 的所有元素都实现了该接口(interface),因此可以提取重复代码,并将 Map 传递给使用该接口(interface)的新方法:
public void writeToFile(String file) {
    PrintWriter pWriter = new PrintWriter(file);

    pWriter.println("[Auto data]");
    writeDataToFile(file, pWriter, autoMap);

    pWriter.println();
    pWriter.println("[Nature data]");
    writeDataToFile(file, pWriter, natureMap);

    pWriter.println();
    pWriter.println("[Animal data]");
    writeDataToFile(file, pWriter, animalMap);

   pWrite.close();
}

// assuming the map key is a string
private void writeDataToFile(String file, PrintWriter pWriter, Map<String, Writable> data) {
    for (Writable line : data.values()) {
        String getLine = line.writeData(file);
        pWriter.println(getLine); 
    } 
}

关于java - 如何避免在 Java 中重复 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67304327/

相关文章:

java - 在jcalendar中以不同颜色显示mysql数据库中的日期

java - 如何为 PreferenceActivity 实现自己的数据存储后端

python - 为什么这是一个无限循环?

c++ - 将指针用于条件 while/for 循环会在编译时出错

Java 打印方法在类里面不起作用

java - 多级 ListView - Android Studio

r - 将列表转换为多个数据框,以便能够仅将每个数据框的一列转换为数字数据

javascript - 对象文字表示法中的方法记录到控制台,但也记录未定义

javascript - 如何向内置 String 对象添加 getter 方法?

java - 在response.sendRedirect中隐藏url中的查询字符串参数