java - 重构 ArrayList 写入文件
问题描述
我不确定如何有效地重构以下代码。
在下面的代码中,有两种方法分别将数据写入文件。它们都非常相似,除了:
- 第一个方法接受单个对象参数,然后调用外部方法进行写入
- 第二种方法接受对象的 ArrayList 作为参数,并在 ArrayList 上循环以执行写入,直接调用 writer。
常识告诉我,这可以重新分解为单个 write 方法,然后这两个方法将调用该方法,但不知道如何实现这一点。
public void updateAccount(Account account) {
String outputString = outputStringCreator(account);
writeOutputString(outputString);
}
public void updateAccounts(ArrayList<Account> accounts) {
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter(filePath));
for(Account account : accounts) {
writer.write(outputStringCreator(account));
writer.newLine();
}
} catch (IOException e) {
System.out.println("IO issue: " + e.getMessage());
}
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
System.out.println("Couldn't close writer: " + e.getMessage());
}
}
}
public void writeOutputString(String outputString) {
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter(filePath));
writer.write(outputString);
writer.newLine();
} catch (IOException e) {
System.out.println("IO issue: " + e.getMessage());
}
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
System.out.println("Couldn't close writer: " + e.getMessage());
}
}
}
解决方案
您可以轻松地简化重载方法,其中一个采用单个参数,另一个采用集合,如下所示:
void foo( ObjectType object ) {
//pack object into singleton list
foo( List.of( object ) );
}
void foo( List< ObjectType > objects ) {
//execute logic on collection
}
您的收集方法应该能够处理列表只有一个元素的情况。这样,您可以轻松地从重载方法中传递单例列表并只编写单个算法。
推荐阅读
- aws-lambda - 通过 SQSEvent 将配置数据传递到 Lambda 触发器
- python - jupyter笔记本中的dask打印
- php - 如何将变量传递给 Laravel Echo 的存在通道以供其“here”方法使用?
- c - 11:14:警告:传递 'strcmp' 的参数 1 使指针从整数而不进行强制转换
- python - Python等待动画完成
- opencv - AttributeError:“NoneType”对象没有属性“形状”
- html - HTML/CSS 过渡适用于悬停,但不适用于 chrome 上的悬停
- c++ - 模板专业化问题
- java - 无法在 Spring Data 事务中捕获 ConstraintViolationException
- python - 为什么我在beautifulsoup 中的find 方法在抓取coursera 网站时返回None?