switch多值匹配骚操作,带你涨姿势!

我们都知道 switch 用来走流程分支,大多情况下用来匹配单个值,如下面的例子所示:

1/** 2 * @from 微信公众号:Java技术栈 3 * @author 栈长 4 */ 5private static void test(int value) { 6 switch (value) { 7 case 1: 8 System.out.println("1"); 9 break; 10 case 2: 11 System.out.println("1"); 12 break; 13 case 3: 14 System.out.println("1"); 15 break; 16 case 4: 17 System.out.println("1"); 18 break; 19 case 5: 20 System.out.println("1"); 21 break; 22 case 6: 23 System.out.println("0"); 24 break; 25 case 7: 26 System.out.println("0"); 27 break; 28 default: 29 System.out.println("-1"); 30 } 31}

相关阅读:switch case 支持的 6 种数据类型

大概的意思就是,周一到周五输出:1,周六到周日输出:0,默认输出-1。

这样写,很多重复的逻辑,冗余了。

也许这个例子不是很合适,用 if/ else 更恰当,但这只是个例子,实际开发中肯定会有某几个 case 匹配同一段逻辑的情况。

那么,如何让多个 case 匹配同一段逻辑呢?

如下面例子所示:

1/** 2 * @from 微信公众号:Java技术栈 3 * @author 栈长 4 */ 5private static void test(int value) { 6 switch (value) { 7 case 1: case 2: case 3: case 4: case 5: 8 System.out.println("1"); 9 break; 10 case 6: case 7: 11 System.out.println("0"); 12 break; 13 default: 14 System.out.println("-1"); 15 } 16}

把相同逻辑的 case 放一起,最后一个 case 写逻辑就行了。

格式化后就是这样了:

1/** 2 * @from 微信公众号:Java技术栈 3 * @author 栈长 4 */ 5private static void test(int value) { 6 switch (value) { 7 case 1: 8 case 2: 9 case 3: 10 case 4: 11 case 5: 12 System.out.println("1"); 13 break; 14 case 6: 15 case 7: 16 System.out.println("0"); 17 break; 18 default: 19 System.out.println("-1"); 20 } 21}

是不是很骚?

其实这不是最合适的最好的写法,在 Java 12 中还可以更骚。

在 Java 12 中可以用逗号来分开多个值,还能用 lambda 表达式,甚至还能省略 break,使用 switch 更方便,具体看这篇文章:Java 12 骚操作, switch居然还能这样玩,或者关注微信公众号:Java技术栈,在后台回复 "新特性" 获取这篇文章。

扫码关注公众号,在后台回复:100,可获取100+本重磅架构师电子书

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Android So动态加载 优雅实现与原理分析

背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我