1. 程式人生 > >switch多值匹配騷操作,帶你漲姿勢!

switch多值匹配騷操作,帶你漲姿勢!

我們都知道 switch 用來走流程分支,大多情況下用來匹配單個值,如下面的例子所示:

/**
 * @from 微信公眾號:Java技術棧
 * @author 棧長
 */
private static void test(int value) {
    switch (value) {
        case 1:
            System.out.println("1");
            break;
        case 2:
            System.out.println("1");
            break;
        case 3:
            System.out.println("1");
            break;
        case 4:
            System.out.println("1");
            break;
        case 5:
            System.out.println("1");
            break;
        case 6:
            System.out.println("0");
            break;
        case 7:
            System.out.println("0");
            break;
        default:
            System.out.println("-1");
    }
}

相關閱讀:switch case 支援的 6 種資料型別。

大概的意思就是,週一到週五輸出:1,週六到週日輸出:0,預設輸出-1。

這樣寫,很多重複的邏輯,冗餘了。

也許這個例子不是很合適,用 if/ else 更恰當,但這只是個例子,實際開發中肯定會有某幾個 case 匹配同一段邏輯的情況。

那麼,如何讓多個 case 匹配同一段邏輯呢?

如下面例子所示:

/**
 * @from 微信公眾號:Java技術棧
 * @author 棧長
 */
private static void test(int value) {
    switch (value) {
        case 1: case 2: case 3: case 4: case 5:
            System.out.println("1");
            break;
        case 6: case 7:
            System.out.println("0");
            break;
        default:
            System.out.println("-1");
    }
}

把相同邏輯的 case 放一起,最後一個 case 寫邏輯就行了。

格式化後就是這樣了:

/**
 * @from 微信公眾號:Java技術棧
 * @author 棧長
 */
private static void test(int value) {
    switch (value) {
        case 1: 
        case 2: 
        case 3: 
        case 4: 
        case 5:
            System.out.println("1");
            break;
        case 6: 
        case 7:
            System.out.println("0");
            break;
        default:
            System.out.println("-1");
    }
}

是不是很騷?

其實這不是最合適的最好的寫法,在 Java 12 中還可以更騷。

在 Java 12 中可以用逗號來分開多個值,還能用 lambda 表示式,甚至還能省略 break,使用 switch 更方便,具體看這篇文章:Java 12 騷操作, switch居然還能這樣玩。