gpt4 book ai didi

java - 相同条件连续检查更多次

转载 作者:行者123 更新时间:2023-11-29 10:08:29 25 4
gpt4 key购买 nike

我必须将操作(数据库查询或计算)的结果分配给返回变量,如果结果无效(null、空...),最终执行另一个操作;但是,这种模式至少会发生几次,对我来说似乎有点代码味。我应该以任何方式重构它吗?

String result = planA();
if(!isValid(result))
result = planB();
if(!isValid(result))
result = planC();
if(!isValid(result))
result = planD();
return result;

最佳答案

您可以将其分解为返回第一个有效结果的函数,因为这是您实际执行的操作。

事实上,就预期行为而言,您当前的代码可以这样写:

String result = planA();
if(isValid(result))
return planB();
if(isValid(result))
return planC();
if(isValid(result))
return planD();
return result;

你可以用一个函数把它分解出来:

public String computeResult(Supplier<String>... functions){
String result = null;
for (Supplier<String> function : functions){
result = function.get();
if (isValid(result)){
return result;
}
}
return result;
}

然后调用它:

computeResult(this::planA, this::planB, this::planC, this::planD, ()-> this.planE(anyParam));

作为替代方案,您可以用函数中的流替换循环:

public String computeResult(Supplier<String>... functions){
return
Arrays.stream(functions)
.filter(s-> isValid(s.get()))
.findFirst()
.orElse(functions.get(function.length-1));
// if no valid return the last result function as in the initial code
}

关于java - 相同条件连续检查更多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57554382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com