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

我有一个运行良好的代码,但它看起来太大了,因为它有重复的代码行,有人能帮我把它缩短吗?

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 方法示例类 Sport

public class Sport
{
     // codes omitted

    public String writeData(String file)
    {
        return title + type + cost + location;
    }
    // codes omitted
}

正如您已经注意到,在写入文件时,必须使用 for 循环来按顺序细分数据,但这样做会使代码变得更长且重复,我想不出一种有效的方法来缩短它。

回答

确保NatureSportAnimal都实现了一个接口,例如:

public interface Writable {
    public String writeData(String file);
}

并且由于每个 Map 的所有元素都实现了接口,因此可以提取重复的代码,并将 Map 传递给使用该接口的新方法:

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中重复for循环?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>