优化太多的if-else
来源java小当家
第1种方法:提前return,减少else判断
1 // 1.优化前
2 private int handlerPre1(boolean flag) {
3 if(flag){
4 // TODO
5 return 0;
6 }else{
7 // TODO
8 return -1;
9 }
10 }
11 // 第1种方法:提前return,减少else判断
12 // 这个做法,将可以return的状态提到if中,直接干掉else
13 private int handlerAfter1(boolean flag) {
14 if(!flag){
15 // TODO
16 return -1;
17 }
18 return 0;
19 }
第2种方法:使用三目运算符
1 // 2.优化前
2 private int handlerPre2(boolean flag) {
3 if(flag){
4 return 0;
5 }else{
6 return -1;
7 }
8 }
9 // 第2种方法:使用三目运算符
10 // 对那些依据状态直接返回某个值的情况非常适用,但如果三目运算符中还镶嵌三目运算,建议不要使用
11 private int handlerAfter2(boolean flag) {
12 return flag?0:-1;
13 }
第3种方法:使用Optional
1 // 3.优化前
2 private Integer handlerPre3(){
3 User user = new User();
4 if(user != null){
5 return user.getAge();
6 }
7 return null;
8 }
9 // 第3种方法:使用Optional
10 // Optional让非空校验更加优雅,代码层面减少了if判断。
11 private Integer handlerAfter3(){
12 User user = new User();
13 Optional<User> optional = Optional.ofNullable(user);
14 return optional.map(User::getAge).orElse(null);
15 }
第4种方法:使用switch
1 // 4.优化前
2 private String getCnPre(String en){
3 String cn;
4 if("student".equals(en)){
5 cn = "学生";
6 }else if("teacher".equals(en)){
7 cn = "教师";
8 }else{
9 cn = "未知";
10 }
11 return cn;
12 }
13
14 // 4.1 优化后 使用switch
15 private String getCnAfter1(String en){
16 switch (en) {
17 case "student":
18 return "学生";
19 case "teacher":
20 return "教师";
21 default:
22 return "未知";
23 }
24 }
第5种方法:使用枚举
1 public enum CnEnum {
2 STUDENT("student","学生"),
3 TEACHER("teacher","教师"),
4 UNKNOWN("unknown","未知");
5 private String en;
6 private String cn;
7
8 public String getEn() {
9 return en;
10 }
11 public void setEn(String en) {
12 this.en = en;
13 }
14 public String getCn() {
15 return cn;
16 }
17 public void setCn(String cn) {
18 this.cn = cn;
19 }
20 CnEnum(String en, String cn) {
21 this.en = en;
22 this.cn = cn;
23 }
24
25 static String of(String en){
26 for (CnEnum temp : CnEnum.values()){
27 if(temp.getEn().equals(en)){
28 return temp.getCn();
29 }
30 }
31 return CnEnum.UNKNOWN.getCn();
32 }
33 }
1 // 4.2 优化前 使用枚举
2 private String getCnAfter2(String en){
3 return CnEnum.of(en);
4 }
第6种方法:使用工厂模式
(1)定义一个职业接口,里面定义一个输出方法
1 public interface Profession {
2 String output();// 输出
3 }
(2)每增加一种职业,都实现这个接口(策略模式)
1 public class Teacher implements Profession{
2 @Override
3 public String output() {
4 return "教书";
5 }
6 }
7
8 public class Student implements Profession{
9 @Override
10 public String output() {
11 return "学习";
12 }
13 }
(3)定义一个工厂类,用来根据具体情况生产各种职业类(工厂模式)
1 public class ProfessionFactory {
2
3 private static Map<String,Profession> map = new HashMap<>();
4 private static final Profession DEFAULT_PROFESSION = new DefaultProfession();
5 static {
6 map.put("student",new Student());
7 map.put("teacher",new Teacher());
8 map.put("default",DEFAULT_PROFESSION);
9 }
10 public static Profession getProfession(String en){
11 Profession profession = map.get(en);
12 return profession == null?DEFAULT_PROFESSION:profession;
13 }
14
15 static class DefaultProfession implements Profession {
16 @Override
17 public String output() {
18 return "未知";
19 }
20 }
21
22 }
(4)测试
1 // 5.优化后 使用 策略模式+工厂模式
2 // 1.定义一个职业接口,里面定义一个输出方法
3 // 2.每增加一种职业,都实现这个接口(策略模式)
4 // 3.定义一个工厂类,用来根据具体情况生产各种职业类(工厂模式)
5 private void handlerAfter5(String en){
6 Profession profession = ProfessionFactory.getProfession(en);
7 System.out.println(profession.output());
8 }
优化太多的if-else的更多相关文章
- spfa + slf优化
最近在练习费用流 , 不是要用spfa吗 ,我们教练说:ns学生写朴素的spfa说出去都让人笑 . QwQ,所以就去学了一下优化 . slf优化就是双向队列优化一下,本来想用lll优化,可是优化后我t ...
- MongoDB优化与一些需要注意的细节
这里总结下这段时间使用mongo的心得,列出了几个需要注意的地方. 1. 系统参数及mongo参数设置 mongo参数主要是storageEngine和directoryperdb,这两个参数一开始不 ...
- MongoDB优化心得分享
这里总结下这段时间使用mongo的心得,列出了几个需要注意的地方. 1. 系统参数及mongo参数设置 mongo参数主要是storageEngine和directoryperdb,这两个参数一开始不 ...
- 解决Win7旗舰版开机后无线网络识别非常慢的问题
最近电脑开机后WIFI识别和连接非常慢,不知何故.查看百度安全卫士的优化记录,发现其禁用了 Network List Service,将该服务设为自动启动,重启服务后,问题解决.PS:如此优化太可恶!
- B2B2C商品模块数据库设计
kentzhu: 在电子商务里,一般会提到这样几个词:商品.单品.SPU.SKU 简单理解一下,SPU是标准化产品单元,区分品种:SKU是库存量单位,区分单品:商品特指与商家有关的商品,可对应多个SK ...
- SEO基础内容
学习SEO人群 网络设计师 网站站长 搜索引擎相关人员 网络营销顾问 企业主 搜索引擎 Yahoo msn google baidu SEM包括SEO,竞价排名等 搜索引擎爬虫流程 派出爬虫-> ...
- t-SNE完整笔记
http://www.datakit.cn/blog/2017/02/05/t_sne_full.html t-SNE(t-distributed stochastic neighbor embedd ...
- 移动端热更新方案(iOS+Android)
PPT资源包含iOS+Android 各种方案分析:https://github.com/qiyer/Share/blob/master/%E7%83%AD%E6%9B%B4%E6%96%B0%E5% ...
- [2017BUAA软工]第一次个人项目 数独的生成与求解
零.Github链接 https://github.com/xxr5566833/sudo 一.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分 ...
随机推荐
- [水题日常]UVA Partitioning by Palindromes
一句话题意:每次给你一个字符串问最少划分成多少段才能使得每一段都是回文串. (下面用\(s[1..n]\)来表示这个字符串) 记\(dp[i]\)为\(s[1..i]\)的答案,如果对于某个\(j&l ...
- 2020年3月16日第一天,今天计划学习:K8S Kubeadm 1.14的完美部署
------------恢复内容开始------------ 一.部署docker 1. 部署docker容器虚拟化平台并配置docker的环境 下载新的yum配置文件 wget http://m ...
- python极简代码之检测列表是否有重复元素
极简python代码收集,实战小项目,不断撸码,以防遗忘.持续更新: 1,检测列表是否有重复元素: 1 # !usr/bin/env python3 2 # *-* coding=utf-8 *-* ...
- 李宏毅机器学习课程笔记-2.5线性回归Python实战
本文为作者学习李宏毅机器学习课程时参照样例完成homework1的记录. 任务描述(Task Description) 现在有某地空气质量的观测数据,请使用线性回归拟合数据,预测PM2.5. 数据集描 ...
- 短链接服务Octopus的实现与源码开放
前提 半年前(2020-06)左右,疫情触底反弹,公司的业务量不断提升,运营部门为了方便短信.模板消息推送等渠道的投放,提出了一个把长链接压缩为短链接的功能需求.当时为了快速推广,使用了一些比较知名的 ...
- Mac 下 IDEA 启动慢的问题
转自: http://blog.csdn.net/KingBoyWorld/article/details/73440717 从控制台来看,每次都会连接本地地址(127.0.0.1),问题可能就出在这 ...
- JPA 复杂查询 - Querydsl
添加依赖 <!--query dsl --> <dependency> <groupId>com.querydsl</groupId> <art ...
- Java发送企业微信应用消息
1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接收到消息后,再 ...
- 【Mongodb】后台主键_id自增(Java版本)
ObjectId的选择 创建MongoDB文档时,如果没有赋值ID,系统会自动帮你创建一个,通常会在客户端由驱动程序完成.得到的ObjectId类似于这种 ObjectId使用12字节的存储空间, ...
- Java学习日报7.20
//7.20 三个和尚比身高import java.util.Scanner; //导包public class Hello{ public static void main(String[] arg ...