lambda表达式_使用类似Lambda的语法作为Java中的表达式进行切换

lambda表达式

lambda表达式

从Java 14开始, switch表达式具有其他Lambda式( case ... -> labels )语法,它不仅可以用作语句,还可以用作计算为单个值的表达式。

使用新的类似Lambda的语法,如果标签匹配,则仅执行箭头右侧的表达式或语句;否则,仅执行箭头右侧的表达式或语句。 没有跌倒:

 var result = switch (str) {

    case "A" -> 1 ;

    case "B" -> 2 ;

    case "C" -> 3 ;

    case "D" -> 4 ;

    default -> throw new IllegalStateException( "Unexpected value: " + str);
 };

上面是switch作为返回单个整数值的表达式的示例。 可以在switch与以下语句相同的语法:

 int result;
 switch (str) {

    case "A" -> result = 1 ;

    case "B" -> result = 2 ;

    case "C" -> {

        result = 3 ;

        System.out.println( "3!" );

    }

    default -> {

        System.err.println( "Unexpected value: " + str);

        result = - 1 ;

    }
 }

yield

case需要块的caseyield可以用来从中返回值:

 var result = switch (str) {

    case "A" -> 1 ;

    case "B" -> 2 ;

    case "C" -> {

        System.out.println( "3!" );

        yield 3 ; // return

    }

    default -> throw new IllegalStateException( "Unexpected value: " + str);
 };

每种

也可以在每种case使用以逗号分隔的多个常量,进一步简化了switch的使用:

 var result = switch (str) {

    case "A" -> 1 ;

    case "B" -> 2 ;

    case "C" -> 3 ;

    case "D" , "E" , "F" -> 4 ;

    default -> 5 ;
 };

最后的例子

为了演示新的switch语法,我创建了这个微型计算器:

 double calculate(String operator, double x, double y) {

    return switch (operator) {

        case "+" -> x + y;

        case "-" -> x - y;

        case "*" -> x * y;

        case "/" -> {

            if (y == 0 ) {

                throw new IllegalArgumentException( "Can't divide by 0" );

            }

            yield x / y;

        }

        default -> throw new IllegalArgumentException( "Unknown operator '%s'" .formatted(operator));

    };
 }

源代码

可以在Github上找到本文的源代码: https : //github.com/kolorobot/java9-and-beyond

参考文献

翻译自: https://www.javacodegeeks.com/2020/05/switch-as-an-expression-in-java-with-lambda-like-syntax.html

lambda表达式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值