使用类似Lambda的语法切换为Java中的表达式
从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
需要块的case
, yield
可用于从中返回值:
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://openjdk.java.net/jeps/361
翻译自: https://www.javacodegeeks.com/2020/05/switch-as-an-expression-in-java-with-lambda-like-syntax.html
使用类似Lambda的语法切换为Java中的表达式相关推荐
- lambda表达式语法_使用类似Lambda的语法作为Java中的表达式进行切换
lambda表达式语法 从Java 14开始, switch表达式具有其他Lambda式 ( case ... -> labels )语法,它不仅可以用作语句,还可以用作计算为单个值的表达式. ...
- java 正则表达式 开头_如何在Java中修复表达式的非法开头
java 正则表达式 开头 您是否遇到过这个令人难以置信的错误,想知道如何解决它? 让我们仔细阅读一下,研究如何解决表达式Java非法开头错误. 这是一个动态错误,这意味着编译器会发现某些不符合Jav ...
- 如何在Java中修复表达式的非法开头
您是否遇到过这个令人难以置信的错误,想知道如何解决它? 让我们浏览一下这篇文章,研究如何解决表达式Java非法开头错误. 这是一个动态错误,这意味着编译器会发现某些不符合Java编程规则或语法的内容. ...
- java 语法糖 字符串,java中的一些语法糖
Java中的语法糖 语法糖的定义:语法糖指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,并没有给语言添加什么新东西,但是更方便程序员使用.通常来说使用语法糖能够增加程序的可读性,从而减少 ...
- java中的表达式是指_Java 表达式,语句和代码块
我们已经理解了变量和运算符,是时间学习下表达式,语句和代码块了.我们用运算符来构建表达式,计算出一个值:而表达式是语句的核心组件:而语句又组成了代码块: Expression - 表达式 表达式是由变 ...
- 逗号表达式 java_c和java中问号表达式与逗号表达式问题
C语言中的问号表达式. --?--:-- 式A?B:C值为:若A为真,则B:若A为假,则C. 但有一点是值得注意的,那就是问号表达式的结合性,问号表达式是从右往左的运算方向 尤其是当问号表达式嵌套使用 ...
- 如何在Java中使用表达式_如何在java中计算表达式?
我在快速谷歌后发现了这段代码: import java.util.Stack; /** * Class to evaluate infix and postfix expressions. * * @ ...
- Java中Lambada表达式使用方法
Lamabada表达式:如果一个接口里有且只有一个抽象方法,称为单接口:JDK8后,JAVA开始使用Lamabada表达式,也称为函数接口 使用方法: //第一种方法 (int a, int b)-& ...
- java三元运算_记一次java中三元表达式的坑(避免踩坑)
近期一直在刷算法,原创文章写的也比较少,今天的主题不算是一个很大的问题,是我做题的时候出来的,而且还曾在A厂的公众号上看到过,今天自己整理一下,避免大家入坑. 这个问题是三元表达式会在计算的时候出现拆 ...
最新文章
- Vision Transformers 大有可为!
- [每天进步一点 -- 流水账]第3周
- RuntimeError: The full_object_detection must use the iBUG 300W 68 point face landmark style.
- [整理+原创]ubuntu Thunderbird Mail设置自动提醒
- FileBeat + Pipeline 解析日志 保存至ElasticSearch(实战)
- 使用ITEXT操作PDF文件
- Eclipse常用的一些设置
- Enriching Local and Global Contexts for Temporal Action Localization
- PS 制作ICO图标和图片背景透明化
- C语言应用(1)——Unix时间戳和北京时间的相互转换
- 使用dd命令克隆整个系统
- 重磅!镭速传输Raysync发布11项全新功能
- “ 骗 ”分指南——对于蓝桥你不得不知的应试技巧(文末发送礼包)
- 自动化运维平台搭建(一)
- 无线网的dhcp服务器是什么,关于DHCP服务里的路由器地址租期什么意思
- 毕业设计效果展示:改良的CP-VTON(ICP-VTON)模型
- java ncso发送电邮_如何在Windows中从命令行发送电子邮件(无需额外的软件)
- 无人直播慢直播设备介绍
- 【iOS】动态更换图标
- win10+Ubuntu17.04+EFI启动
热门文章
- hdu4965-Fast Matrix Calculation【矩阵乘法】
- jzoj1213-棋盘上的士兵【状压dp】
- USACO2.3【dfs,dp,背包】
- 【交互】Omkar and the Meaning of Life(CF-1586D)
- 2019.01.29【NOIP普及组】模拟赛C组总结
- 2017西安交大ACM小学期数论 [完全平方数]
- Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享
- java并发编程之4——Java锁分解锁分段技术
- Java中的基本数据类型转换(自动、强制、提升)
- 内连接,外链接(左连接、右连接、全连接),交叉连接大总结