从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://openjdk.java.net/jeps/361

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

使用类似Lambda的语法切换为Java中的表达式相关推荐

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

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

  2. java 正则表达式 开头_如何在Java中修复表达式的非法开头

    java 正则表达式 开头 您是否遇到过这个令人难以置信的错误,想知道如何解决它? 让我们仔细阅读一下,研究如何解决表达式Java非法开头错误. 这是一个动态错误,这意味着编译器会发现某些不符合Jav ...

  3. 如何在Java中修复表达式的非法开头

    您是否遇到过这个令人难以置信的错误,想知道如何解决它? 让我们浏览一下这篇文章,研究如何解决表达式Java非法开头错误. 这是一个动态错误,这意味着编译器会发现某些不符合Java编程规则或语法的内容. ...

  4. java 语法糖 字符串,java中的一些语法糖

    Java中的语法糖 语法糖的定义:语法糖指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,并没有给语言添加什么新东西,但是更方便程序员使用.通常来说使用语法糖能够增加程序的可读性,从而减少 ...

  5. java中的表达式是指_Java 表达式,语句和代码块

    我们已经理解了变量和运算符,是时间学习下表达式,语句和代码块了.我们用运算符来构建表达式,计算出一个值:而表达式是语句的核心组件:而语句又组成了代码块: Expression - 表达式 表达式是由变 ...

  6. 逗号表达式 java_c和java中问号表达式与逗号表达式问题

    C语言中的问号表达式. --?--:-- 式A?B:C值为:若A为真,则B:若A为假,则C. 但有一点是值得注意的,那就是问号表达式的结合性,问号表达式是从右往左的运算方向 尤其是当问号表达式嵌套使用 ...

  7. 如何在Java中使用表达式_如何在java中计算表达式?

    我在快速谷歌后发现了这段代码: import java.util.Stack; /** * Class to evaluate infix and postfix expressions. * * @ ...

  8. Java中Lambada表达式使用方法

    Lamabada表达式:如果一个接口里有且只有一个抽象方法,称为单接口:JDK8后,JAVA开始使用Lamabada表达式,也称为函数接口 使用方法: //第一种方法 (int a, int b)-& ...

  9. java三元运算_记一次java中三元表达式的坑(避免踩坑)

    近期一直在刷算法,原创文章写的也比较少,今天的主题不算是一个很大的问题,是我做题的时候出来的,而且还曾在A厂的公众号上看到过,今天自己整理一下,避免大家入坑. 这个问题是三元表达式会在计算的时候出现拆 ...

最新文章

  1. Vision Transformers 大有可为!
  2. [每天进步一点 -- 流水账]第3周
  3. RuntimeError: The full_object_detection must use the iBUG 300W 68 point face landmark style.
  4. [整理+原创]ubuntu Thunderbird Mail设置自动提醒
  5. FileBeat + Pipeline 解析日志 保存至ElasticSearch(实战)
  6. 使用ITEXT操作PDF文件
  7. Eclipse常用的一些设置
  8. Enriching Local and Global Contexts for Temporal Action Localization
  9. PS 制作ICO图标和图片背景透明化
  10. C语言应用(1)——Unix时间戳和北京时间的相互转换
  11. 使用dd命令克隆整个系统
  12. 重磅!镭速传输Raysync发布11项全新功能
  13. “ 骗 ”分指南——对于蓝桥你不得不知的应试技巧(文末发送礼包)
  14. 自动化运维平台搭建(一)
  15. 无线网的dhcp服务器是什么,关于DHCP服务里的路由器地址租期什么意思
  16. 毕业设计效果展示:改良的CP-VTON(ICP-VTON)模型
  17. java ncso发送电邮_如何在Windows中从命令行发送电子邮件(无需额外的软件)
  18. 无人直播慢直播设备介绍
  19. 【iOS】动态更换图标
  20. win10+Ubuntu17.04+EFI启动

热门文章

  1. hdu4965-Fast Matrix Calculation【矩阵乘法】
  2. jzoj1213-棋盘上的士兵【状压dp】
  3. USACO2.3【dfs,dp,背包】
  4. 【交互】Omkar and the Meaning of Life(CF-1586D)
  5. 2019.01.29【NOIP普及组】模拟赛C组总结
  6. 2017西安交大ACM小学期数论 [完全平方数]
  7. Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享
  8. java并发编程之4——Java锁分解锁分段技术
  9. Java中的基本数据类型转换(自动、强制、提升)
  10. 内连接,外链接(左连接、右连接、全连接),交叉连接大总结