代码优化 @PostMapping("/api/retryAll") public ResponseEntity<String> retryAll() { int success = 0; boolean flag = true; for (String processingGroup : StaticConst.processingGroups) { while (flag) { SequencedDeadLetterProcessor<EventMessage<?>> processor = configuration .sequencedDeadLetterProcessor(processingGroup) .orElseThrow(); boolean result = processor.processAny(); flag = result ? true : false; success += result ? 1 : 0; } } StringBuilder responseBuilder = new StringBuilder("执行完成,") .append("成功执行" + success) .append("次"); return ResponseEntity.ok(responseBuilder.toString()); }
时间: 2024-02-10 14:07:46 浏览: 133
面试String的特点及重要方法(二)
以下是对该代码进行的一些优化建议:
1. 将 while 循环中的 flag 变量改为 do-while 循环,避免无法进入循环的情况。
2. 将 success 变量声明在 for 循环内部,避免多次执行时的累加问题。
3. 将 responseBuilder 的拼接过程改为使用 String.format() 方法,使代码更简洁。
4. 可以考虑将处理每个 processingGroup 的逻辑封装成一个方法,提高代码复用性。
优化后的代码示例:
```
@PostMapping("/api/retryAll")
public ResponseEntity<String> retryAll() {
int totalCount = 0;
int successCount = 0;
for (String processingGroup : StaticConst.processingGroups) {
boolean flag;
do {
SequencedDeadLetterProcessor<EventMessage<?>> processor = configuration
.sequencedDeadLetterProcessor(processingGroup)
.orElseThrow();
flag = processor.processAny();
totalCount++;
successCount += flag ? 1 : 0;
} while (flag);
}
String response = String.format("执行完成,成功执行 %d 次,总共尝试了 %d 次", successCount, totalCount);
return ResponseEntity.ok(response);
}
```
通过使用 do-while 循环,可以确保至少执行一次逻辑。声明 successCount 变量在 for 循环内部,可以避免多次执行时的累加问题。使用 String.format() 方法,可以使代码更简洁易读。将处理每个 processingGroup 的逻辑封装成一个方法,可以提高代码复用性,使代码更易维护。
阅读全文