我有一个工作正常的代码,但它看起来太大,因为它有重复的代码行,有人可以帮我缩短它吗?
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/