Java 有效减少条件算子

Java 有效减少条件算子,java,android,sonarqube,Java,Android,Sonarqube,我正在尝试执行的操作:我正在尝试减少条件运算符,因为声纳给出了一个错误 if (!parseBooleanFromString(response.getBuy().getHasEligibleAccounts()) && (!parseBooleanFromString(response.getSell().getHasEligibleAccounts()) &&

我正在尝试执行的操作:我正在尝试减少条件运算符,因为声纳给出了一个错误

     if (!parseBooleanFromString(response.getBuy().getHasEligibleAccounts()) &&
                            (!parseBooleanFromString(response.getSell().getHasEligibleAccounts()) &&
                                    (!parseBooleanFromString(response.getExchange().getHasEligibleAccounts()) &&
                                            (!parseBooleanFromString(response.getWorkplaceRetirement().getHasPlansEligibleForChangeContributions()) &&
                                                    (!parseBooleanFromString(response.getWorkplaceRetirement().getHasPlansEligibleForChangeInvestments())))))) {

                        //Success
                    } else {
                        //Failure
 }

     private boolean parseBooleanFromString(String mStr) {
            return Boolean.parseBoolean(mStr);
        }
我所尝试的: 我试图将所有布尔值放在一个列表中并进行检查


这是最好的方法还是有更有效的方法您还可以将这些条件移动到不同的函数中,这些函数在内部调用其他函数并返回单个布尔结果。这样,上述if条件中只有一个函数将在内部计算并返回结果。

您还可以将这些条件移动到不同的函数中,这些函数在内部调用其他函数并返回单个布尔结果。这样,在上述if条件中只有一个函数将在内部计算并返回结果。

既然您正在检查每个语句是否为false,那么在内存中保留一个全局整数如何:
private int product=1。创建一个单独的方法,用于计算乘积(将字符串替换为布尔解析器):

本质上,您不是在运行“if语句”,而是在乘以布尔值:

product = 1;

updateProduct(response.getBuy().getHasEligibleAccounts());
updateProduct(response.getSell().getHasEligibleAccounts());
//etc

if (product > 0){
    //success
} else {
    //failure
}

说明:如果在任何时候条件为真,则产品将始终为0。乘积大于0的唯一实例是当所有语句都为false时

既然要检查每个语句是否为false,那么在内存中保留一个全局整数怎么样:
private int product=1。创建一个单独的方法,用于计算乘积(将字符串替换为布尔解析器):

本质上,您不是在运行“if语句”,而是在乘以布尔值:

product = 1;

updateProduct(response.getBuy().getHasEligibleAccounts());
updateProduct(response.getSell().getHasEligibleAccounts());
//etc

if (product > 0){
    //success
} else {
    //failure
}

说明:如果在任何时候条件为真,则产品将始终为0。产品为>0的唯一实例是所有语句都为false时,不确定sonar抱怨了什么,但有大量多余的括号和令人困惑的否定。使用DeMorgans定律,您至少可以简化为:

    boolean b = parseBooleanFromString(response.getBuy().getHasEligibleAccounts())
            || parseBooleanFromString(response.getSell().getHasEligibleAccounts())
            || parseBooleanFromString(response.getExchange().getHasEligibleAccounts())
            || parseBooleanFromString(response.getWorkplaceRetirement().getHasPlansEligibleForChangeContributions())
            || parseBooleanFromString(
                    response.getWorkplaceRetirement().getHasPlansEligibleForChangeContributions());
    if (!b) {
或者如果您更喜欢Java8语法

    Stream<Boolean> bools = Stream.of(parseBooleanFromString(response.getBuy().getHasEligibleAccounts()),
            parseBooleanFromString(response.getSell().getHasEligibleAccounts()),
            parseBooleanFromString(response.getExchange().getHasEligibleAccounts()),
            parseBooleanFromString(response.getWorkplaceRetirement().getHasPlansEligibleForChangeContributions()),
            parseBooleanFromString(response.getWorkplaceRetirement().getHasPlansEligibleForChangeContributions()));

    boolean c = ! bools.anyMatch(e -> e);

    if (!c) {
Stream bools=Stream.of(parseBooleanFromString(response.getBuy().getHaseLigibleCounts()),
parseBooleanFromString(response.getSell().getHasEligibleAccounts()),
parseBooleanFromString(response.getExchange().getHasEligibleAccounts()),
parseBooleanFromString(response.GetWorkplaceRetrient().GetHasPlansLigibleforChangeContributions()),
parseBooleanFromString(response.GetWorkplaceRetrient().GetHasPlansLigibleforChangeContributions());
布尔c=!bools.anyMatch(e->e);
如果(!c){

不确定sonar抱怨什么,但你有很多多余的括号和令人困惑的否定词。使用Demorgan定律,你至少可以简化为:

    boolean b = parseBooleanFromString(response.getBuy().getHasEligibleAccounts())
            || parseBooleanFromString(response.getSell().getHasEligibleAccounts())
            || parseBooleanFromString(response.getExchange().getHasEligibleAccounts())
            || parseBooleanFromString(response.getWorkplaceRetirement().getHasPlansEligibleForChangeContributions())
            || parseBooleanFromString(
                    response.getWorkplaceRetirement().getHasPlansEligibleForChangeContributions());
    if (!b) {
或者如果您更喜欢Java8语法

    Stream<Boolean> bools = Stream.of(parseBooleanFromString(response.getBuy().getHasEligibleAccounts()),
            parseBooleanFromString(response.getSell().getHasEligibleAccounts()),
            parseBooleanFromString(response.getExchange().getHasEligibleAccounts()),
            parseBooleanFromString(response.getWorkplaceRetirement().getHasPlansEligibleForChangeContributions()),
            parseBooleanFromString(response.getWorkplaceRetirement().getHasPlansEligibleForChangeContributions()));

    boolean c = ! bools.anyMatch(e -> e);

    if (!c) {
Stream bools=Stream.of(parseBooleanFromString(response.getBuy().getHaseLigibleCounts()),
parseBooleanFromString(response.getSell().getHasEligibleAccounts()),
parseBooleanFromString(response.getExchange().getHasEligibleAccounts()),
parseBooleanFromString(response.GetWorkplaceRetrient().GetHasPlansLigibleforChangeContributions()),
parseBooleanFromString(response.GetWorkplaceRetrient().GetHasPlansLigibleforChangeContributions());
布尔c=!bools.anyMatch(e->e);
如果(!c){

我会这样做:

private boolean checkEligibility(LaunchPoints response) {
    final String trueStr = "true";
    if (trueStr.equals(response.getBuy().getHasEligibleAccounts()))  return true;
    if (trueStr.equals(response.getSell().getHasEligibleAccounts())) return true;

    [...]

    return false;         
}

想法是,跳过解析布尔值,只需检查“true”并使您的条件更具可读性。

我会这样做:

private boolean checkEligibility(LaunchPoints response) {
    final String trueStr = "true";
    if (trueStr.equals(response.getBuy().getHasEligibleAccounts()))  return true;
    if (trueStr.equals(response.getSell().getHasEligibleAccounts())) return true;

    [...]

    return false;         
}

其思想是,跳过解析布尔值,只需检查“true”并且使你的条件更具可读性。

声纳仍然会给出错误,但现在在这个方法中。声纳仍然会给出错误,但现在在这个方法中。Is
product*=1
…意味着
product
=
product
*
1
,我应该在全局范围内将
product
声明为
1
begining@Devrath是的,那是什么它的意思是=)是
product*=1
…意思是
product
=
product
*
1
,我应该在begining@Devrath是的,这就是它的意思=)这不是我的意思。不需要解析。这不是我的意思。不需要解析。