如果不然,避免多重

时间:2016-06-17 03:05:53

标签: java if-statement optimization

我有以下情况,

String arr[] 作为输入,可以将整数值,null或空作为字符串。 (例如){"230",null,"6",""}

现在,

1。如果arr的前两个条目中出现空字符或空字符串,则无效的方案不会打印任何内容。

2. 如果arr的最后两个条目中存在null或empty,并且前两个条目不为null且不为空,则打印前两个条目。

(例如)如果 arr [] 是{" 2"," 77",null," 5"}输出将 2,77

3. 如果arr []中的条目既不是空也不是空,请检查所有条目是否都是数字。如果没有打印任何内容。

现在我的代码就像这样,

simple validation()
{
    onlyFirstTwoNotNullOrNotEmpty = false;

    if(//Check if first two params are null)
    {
        //"print nothing" and return
    }
    else if(check if third **or** fourth param is null)
    {
        onlyFirstTwoNotNullOrNotEmpty = true; // setting a boolean 
    }

    //Proceed to check empty string
    if(//Check if first two params are empty)
    {
        "print nothing" and return
    }
    else if(!onlyFirstTwoNotNullOrNotEmpty) //checking if null 
    {
        if(check if third **or** fourth param is empty)
        {
            onlyFirstTwoNotNullOrNotEmpty = true; // setting a boolean 
        }
    }

    //if all values are not null and not empty      
    //onlyFirstTwoNotNullOrNotEmpty  will be still false

    String result;

    if(onlyFirstTwoNotNullOrNotEmpty )
    {
        result = checkIfNumeric(0,1); // only first two entries
    }
    else
    {
        result = checkIfNumeric(0,arr[arr.length-1]); // for all entries
    }

    if(!result.equals("success"))
    {
        return and print nothing
    }

    if(onlyFirstTwoNotNullOrNotEmpty)
    {
        print only first two and return;
    }
    print all entries and return;
}

如何使用更少的if和else循环更好地优化此代码?是否有通过lambda表达式的可能性?

我不想使用第三方API进行null或空字符串检查。

2 个答案:

答案 0 :(得分:0)

也许您可以使用switch语句。循环遍历数组的值并使用switch语句而不是if-else。

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

答案 1 :(得分:0)

你的代码比它需要的更复杂:

如果代码采用自己的方法,则可以在没有else子句的情况下执行此操作,就像您的代码一样。

在这里,有评论:

private static void simpleValidation(String[] arr) {
    // Undefined Rule: If bad input, print nothing
    if (arr.length != 4)
        return;

    // 1: If a null or empty string present in first two entries of arr, it is a invalid scenario print nothing
    if (isNullOrEmpty(arr[0]) || isNullOrEmpty(arr[1]))
        return;

    // 2: If a null or empty is present in last two entries of arr, and first two entries are not null and not empty print first two entries.
    if (isNullOrEmpty(arr[2]) || isNullOrEmpty(arr[3])) {
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        return;
    }

    // 3: If no entry in arr[] is neither null nor empty check if all entries are numeric. If not print nothing.
    if (! isNumeric(arr[0]) || ! isNumeric(arr[1]) || ! isNumeric(arr[2]) || ! isNumeric(arr[3]))
        return;

    // Undefined Rule: Print all values
    System.out.println(arr[0]);
    System.out.println(arr[1]);
    System.out.println(arr[2]);
    System.out.println(arr[3]);
}
private static boolean isNullOrEmpty(String value) {
    return (value == null || value.isEmpty());
}
private static boolean isNumeric(String value) {
    return value.matches("\\d+");
}

如果您想要else条款而不是return条款,例如:因为后面有更多的代码,就是这么简单(使用相同的两个辅助方法):

private static void simpleValidation(String[] arr) {
    if (arr.length == 4 && ! isNullOrEmpty(arr[0]) && ! isNullOrEmpty(arr[1]))
        if (isNullOrEmpty(arr[2]) || isNullOrEmpty(arr[3]))
            System.out.printf("%s%n%s%n", arr[0], arr[1]);
        else if (isNumeric(arr[0]) && isNumeric(arr[1]) && isNumeric(arr[2]) && isNumeric(arr[3]))
            System.out.printf("%s%n%s%n%s%n%s%n", arr[0], arr[1], arr[2], arr[3]);
}