使用类似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需要块的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

配置linux系统ip,Linux系统IP地址配置

命令临时配置ifconfig [Network card name] 10.50.6.16 netmask 255.255.254.0或者ip addr add 10.50.6.200/23 dev [Network card name]router add default gw 10.50.6.1 #添加默认路由重启后失效ip addr add命令添加的IP地址需要使用 ip a show [Network card name]命令查看例…

【AI提示词艺术】第12期 摄影艺术构图处理和人像生成的技巧

摄影艺术构图 星空宇宙 关键词: 强烈的明暗对比,8k,精细的描述,相片纸,超高分辨率,无建筑的,大自然,星空,云朵,刺眼流星,群星,银河,仰视视角,广角镜头 以下是按照提示词类别整理的相关描述&a…

超音速亚原子Enterprise Java

我创建了一个视频,其中用Quarkus(用于现代Java应用程序的运行时)解释“超音速亚原子Java”。 无论您是刚开始涉足Enterprise Java领域,还是已经是一位经验丰富的Java EE / J2EE开发人员,本课程都将指导您如何在2020年构…

linux 打包排除多个目录,tar打包整个目录(可排除子目录)几种方法

例1。压缩并打包目录tar -czf small.tar.gz small(目录名) ;例2。tar zcvf backup.tar.gz site/* –excludesite/attach –excludesite/images简单解释一下:ls -l | grep “^-” 用来把当前目录下所有文件列出来,不包括子目录;awk ‘{print …

Kogito,ergo规则:从知识到服务,轻松自如

欢迎阅读有关Kogito倡议的博客系列的另一集,以及我们将Drools带入云的努力。 这些文章的目的是收集用户对我们提供给Kogito的功能的早期反馈。 在本文中,我们介绍了两种实现完整智能服务的新方法 : 独立的规则服务 集成智能工作流程和规则…

linux系统io查看计算,Linux下查看进程IO工具iopp

Linux下的IO检测工具最常用的是iostat,不过iostat只能查看到总的IO情况。如果要细看具体那一个程序点用的IO较高,可以使用iotop 。不过iotop对内核版本和Python版本有要求,虽然目前主流的CentOS和Ubuntu版本上都适用。不过考虑到其无法适用的…

java 并发锁_Java并发教程–锁定:内在锁

java 并发锁在之前的文章中,我们回顾了在不同线程之间共享数据的一些主要风险(例如原子性和可见性 )以及如何设计类以安全地共享( 线程安全的设计 )。 但是,在许多情况下,我们将需要共享可变数据…

linux 命令 ppt,Linux基本命令()讲解.ppt

第2章 Linux 基本命令 2.1 系统管理命令 在 Linux/UNIX 操作系统中,所有事物都被当作文件来处理:硬件设备(包括键盘和终端)、目录、命令本身,当然还有文件。 实际上是 Linux/UNIX 的能力和灵活性的基础。Linux操作系统命令分为文件管理、文件…

Java14:使用Java 14的新记录联接数据库表

您是否知道可以使用Java 14的预览记录功能将数据库表连接到Java Stream中? 阅读这篇简短的文章,并了解如何使用Speedment Stream ORM完成它。 我们将从如何设置您的项目开始。 设定 下载Java 14 。 转到Speedment Initializer并下载您的项目骨架&#x…

linux 读取内存颗粒,Linux虚拟内存地址转化成物理内存地址

背景现代手机这种SOC(system on chip),因为功耗、Modem等功能soc上集成了很多core,他们还可以是独立的系统在运转。比如ADSP简介ADSP(Application Digital Signal Processing)就是高通的Hexagon DSP ,就是独立运转的一个coresystem。这样做不仅可以使用soc上的专用核…

primefaces_PrimeFaces扩展中的全新JSF组件

primefacesPrimeFaces扩展团队很高兴宣布即将推出的3.0.0主要版本的几个新组件。 我们的新提交者Francesco Strazzullo为该项目提供了“ Turbo Boost”,并带来了至少6个已成功集成的 JSF组件! 当前的开发状态是OpenShift上的deployet – 请查看展示柜。以…

linux数字设定法设定权限,Linux chmod命令详解和使用实例(改变文件或目录的访问权限)...

Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。文件或目录的访问权限分为只读,只写和可执行三种。以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改操作。…

Java 8 Stream中间操作(方法)示例

Java 8 Streams中间操作的完整指南。 所有内置Stream API中间操作(方法)的列表以及示例。 1.概述 在本教程中,我们将学习什么是 Java 8 Stream 中的中间操作 。 所有这些操作都在java.util.stream.Stream包中 。 在上一教程中,我…

linux服务 运维案例,linux运维实战练习案例-2015年12月20日-12月31日

1、创建一个10G的文件系统,类型为ext4,要求开机可自动挂载至单独数据/data目录;[[email protected] /]# cat /proc/partitionsmajor minor #blocks name8 0 52428800 sda8 1 204800 sda18 2 4096000 sda28 …

使用Quarkus调试容器中的系统测试(视频)

如果您能够借助容器在本地进行端到端测试应用程序,则可以提高开发效率。 在下面的视频中,我将展示如何使用Quarkus在Docker容器中调试本地系统测试。 这是我关于有效测试的视频课程的Quarkus扩展。 要了解全部情况,还可以查看以下资源&…

linux中memcpy实现分析,ARM64 的 memcpy 优化与实现

如何优化 memcpy 函数Linux 内核用到了许多方式来加强性能以及稳定性,本文探讨的 memcpy 的汇编实现方式就是其中的一种,memcpy 的性能是否强大,拷贝延迟是否足够低都直接影响着整个系统性能。通过对拷贝函数的理解可以加深对整个系统设计的一…

ejb生命周期_EJB 3.x:生命周期和并发模型(第2部分)

ejb生命周期这是两部分系列的第二篇。 第一部分介绍了有状态和无状态EJB的生命周期以及并发行为。 我将在本文中介绍Singleton EJB 。 Singleton模式可以说是最常用(有时被滥用!)的模式。 单吨又爱它! Java EE使我们无需编写显…

linux修改文件没有备份文件,linux文件或目录权限修改后如何恢复(备份了权限就能恢复)...

操作系统 RHEL5如果你在linux上执行了如下操作chmod -R 777 / 或者 chmod -R 700 /那么恭喜你,你的系统即将崩溃,重启之后,你进不了图形界面,而且很多服务都起不来为什么呢?因为linux中,系统的有些文件和目…

JDK 14 / JEP 305模式匹配“ Smart Casts”实例

我通常将Java代码中instanceof运算符的存在视为“ 红色标志 ”,这意味着在某些情况下使用instanceof不一定是错误的,但是使用它有时表示可以以一种更干净的方式解决设计问题,如所述本文末尾引用的一些资源中的内容(包括有关Java以…

linux美化原理,x-window字体原理及美化

x-window字体原理及美化发布时间:2006-10-07 01:25:15来源:红联作者:caldo1. 简介在我必须处理的一堆讨厌事中,有一项就是没完没了的 X 缺省字体和字体设定 (我专指 XFree86,其它的 X 也许比较好)。有些程序缺省使用固定宽度字体 (fixed width fonts)&am…