来源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的更多相关文章

  1. spfa + slf优化

    最近在练习费用流 , 不是要用spfa吗 ,我们教练说:ns学生写朴素的spfa说出去都让人笑 . QwQ,所以就去学了一下优化 . slf优化就是双向队列优化一下,本来想用lll优化,可是优化后我t ...

  2. MongoDB优化与一些需要注意的细节

    这里总结下这段时间使用mongo的心得,列出了几个需要注意的地方. 1. 系统参数及mongo参数设置 mongo参数主要是storageEngine和directoryperdb,这两个参数一开始不 ...

  3. MongoDB优化心得分享

    这里总结下这段时间使用mongo的心得,列出了几个需要注意的地方. 1. 系统参数及mongo参数设置 mongo参数主要是storageEngine和directoryperdb,这两个参数一开始不 ...

  4. 解决Win7旗舰版开机后无线网络识别非常慢的问题

    最近电脑开机后WIFI识别和连接非常慢,不知何故.查看百度安全卫士的优化记录,发现其禁用了 Network List Service,将该服务设为自动启动,重启服务后,问题解决.PS:如此优化太可恶!

  5. B2B2C商品模块数据库设计

    kentzhu: 在电子商务里,一般会提到这样几个词:商品.单品.SPU.SKU 简单理解一下,SPU是标准化产品单元,区分品种:SKU是库存量单位,区分单品:商品特指与商家有关的商品,可对应多个SK ...

  6. SEO基础内容

     学习SEO人群 网络设计师 网站站长 搜索引擎相关人员 网络营销顾问 企业主 搜索引擎 Yahoo msn google baidu SEM包括SEO,竞价排名等 搜索引擎爬虫流程 派出爬虫-> ...

  7. t-SNE完整笔记

    http://www.datakit.cn/blog/2017/02/05/t_sne_full.html t-SNE(t-distributed stochastic neighbor embedd ...

  8. 移动端热更新方案(iOS+Android)

    PPT资源包含iOS+Android 各种方案分析:https://github.com/qiyer/Share/blob/master/%E7%83%AD%E6%9B%B4%E6%96%B0%E5% ...

  9. [2017BUAA软工]第一次个人项目 数独的生成与求解

    零.Github链接 https://github.com/xxr5566833/sudo 一.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分 ...

随机推荐

  1. java_day_02

    一.return的两个作用 1.停止当前方法 2.将后面的结果数据返回值还给调用处 二.方法的三种调用格式 1.单独调用:方法名(参数): public class Method { public s ...

  2. SpringBoot从入门到精通教程(七)

    今天,我们继续讲SpringBoot整合Redis ,也就缓存,它将与我们的Springboot整合 Redis 简介 Redis 是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语 ...

  3. Restful API 接口设计标准及规范

    Restful API 接口设计标准以及规范 RESTful概念 理解和评估以网络为基础的应用软件的架构设计,得到一个功能强.性能好.适宜通信的架构.REST指的是一组架构约束条件和原则." ...

  4. GitBook简单的使用

    GitBook 是一个基于 Node.js 的命令行工具,支持 Markdown 和 AsciiDoc 两种语法格式,可以输出 HTML.PDF.eBook 等格式的电子书. 使用 GitBook 管 ...

  5. Python爬虫:爬取喜马拉雅音频数据详解

    前言 喜马拉雅是专业的音频分享平台,汇集了有声小说,有声读物,有声书,FM电台,儿童睡前故事,相声小品,鬼故事等数亿条音频,我最喜欢听民间故事和德云社相声集,你呢? 今天带大家爬取喜马拉雅音频数据,一 ...

  6. 用Python从头开始构建神经网络

    神经网络已经被开发用来模拟人脑.虽然我们还没有做到这一点,但神经网络在机器学习方面是非常有效的.它在上世纪80年代和90年代很流行,最近越来越流行.计算机的速度足以在合理的时间内运行一个大型神经网络. ...

  7. NET 5 Session、Cookie和Cache的使用

    1.Cookie public IConfiguration Configuration { get; } // This method gets called by the runtime. Use ...

  8. 微信小程序--相对路径和绝对路径

    相对路径: ../表示返回访问上一级目录 如:../../components/like/index 绝对路径: 以"/"开头 表示从根目录开始寻找文件 如:/components ...

  9. CentOS7安装Elasticsearch7

    下载地址:https://www.elastic.co/cn/downloads/elasticsearch 使用YUM安装 # 下载并安装公共签名密钥 rpm --import https://ar ...

  10. 手把手教你实现自定义Spring Boot的 Starter

    引言 上篇文章<天天用SpringBoot,它的自动装配原理却说不出来>我们有说springBoot的自动装配怎么实现的(建议最好先看下篇文章,因为前后有关系),这篇文章的话我们就自己来实 ...