java - 在 Java 中迭代时设置不同的值
问题描述
我正在开发一个应用程序,我必须在其中存储不同的 MultipartFile 文件(jpgs、pngs 等),并试图改进这个重复的代码:
store(dogfile, dogDirectory, vetDTO::setDog);
store(catFile, catDirectory, vetDTO::setCat);
store(lionFile, lionDirectory, vetDTO::setLion);
store(bugFile, bugDirectory, vetDTO::setBug);
store(mouseFile, mouseDirectory, vetDTO::setMouse);
store(bunnyFile, bunnyDirectory, vetDTO::setBunny);
我尝试将每个文件和目录存储在这样的 Map 中:
Map<MultipartFile, String> filesToStore = new HashMap<MultipartFile, String>();
filesToStore.put(dogfile, dogDirectory);
filesToStore.put(catFile, catDirectory);
filesToStore.put(lionFile, lionDirectory);
filesToStore.put(bugFile, bugDirectory);
filesToStore.put(bunnyFile, bunnyDirectory);
filesToStore.forEach((f,d) -> store(f, d, vetDTO::set...));
但是最后一行给了我一个错误,因为我无法在迭代时使用每个 setter,而且我真的很困惑如何实现这一点。
迭代时是否可以使用不同的设置器?
解决方案
目前尚不清楚您的可编译代码是什么,但我可以给您一个提示。
您可以使用简单的循环删除重复项:
Main context = new Main();
VetDTO vetDTO = new VetDTO();
for (Animal animal : Animal.values())
animal.store(context, vetDTO);
为此,您必须将与特定动物相关的代码封装在一个单独的类中。
public class Main {
private MultipartFile dogFile;
private MultipartFile catFile;
private MultipartFile lionFile;
private MultipartFile bugFile;
private MultipartFile mouseFile;
private MultipartFile bunnyFile;
private String dogDirectory;
private String catDirectory;
private String lionDirectory;
private String bugDirectory;
private String mouseDirectory;
private String bunnyDirectory;
enum Animal {
DOG(context -> context.dogFile, context -> context.dogDirectory, (directory, vetDTO) -> vetDTO.setDog(directory)),
CAT(context -> context.catFile, context -> context.catDirectory, (directory, vetDTO) -> vetDTO.setCat(directory)),
LION(context -> context.lionFile, context -> context.lionDirectory, (directory, vetDTO) -> vetDTO.setLion(directory)),
BUG(context -> context.bugFile, context -> context.bugDirectory, (directory, vetDTO) -> vetDTO.setBug(directory)),
MOUSE(context -> context.mouseFile, context -> context.mouseDirectory, (directory, vetDTO) -> vetDTO.setMouse(directory)),
BUNNY(context -> context.bunnyFile, context -> context.bunnyDirectory, (directory, vetDTO) -> vetDTO.setBunny(directory));
private final Function<Main, MultipartFile> getMultipartFile;
private final Function<Main, String> getDirectory;
private final BiConsumer<String, VetDTO> setAnimal;
Animal(Function<Main, MultipartFile> getMultipartFile,
Function<Main, String> getDirectory,
BiConsumer<String, VetDTO> setAnimal) {
this.getMultipartFile = getMultipartFile;
this.getDirectory = getDirectory;
this.setAnimal = setAnimal;
}
public void store(Main context, VetDTO vetDTO) {
MultipartFile multipartFile = getMultipartFile.apply(context);
String directory = getDirectory.apply(context);
setAnimal.accept(directory, vetDTO);
}
}
public static class VetDTO {
public void setDog(String dogDirectory) {}
public void setCat(String catDirectory) {}
public void setLion(String lionDirectory) {}
public void setBug(String bugDirectory) {}
public void setMouse(String mouseDirectory) {}
public void setBunny(String bunnyDirectory) {}
}
}
推荐阅读
- sql - 如何测试表中的所有行是否重复(一列除外)
- java - “我无法正确捕获 NumberFormatException,因此我的 onClick 无法正常工作
- c# - 控件数据绑定时,无法在 DataGridView 中以编程方式添加行
- python-3.x - 绘制日期和货币并将日期转换为可读格式
- r - 将json文件转换为R中的数据框
- python - 为什么我只能得到索引 0 的正确回报
- python - 从列表中访问模型实例的属性并将它们添加在一起?
- python - 打印树的内容,以便每个父级覆盖其所有子级
- java - 使用 Collectors.groupingBy() 时,TreeMap 排序不起作用
- firebase - Firebase Cloud Functions 模拟器抛出“exited with code: 1”错误