实战if-else 过多详解
1.本文实例代码仅仅是俩个小例子。
package com.example.demo.pattern.ifElse; import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function; /**
* 如何解决解决类似
* 1 if (condition1) {
* 2
* 3 } else if (condition2) {
* 4
* 5 } else if (condition3) {
* 6
* 7 } else if (condition4) {
* 8
* 9 } else {
* 10
* 11 }
*
* 1 if (param.equals(value1)) {
* 2 doAction1(someParams);
* 3 } else if (param.equals(value2)) {
* 4 doAction2(someParams);
* 5 } else if (param.equals(value3)) {
* 6 doAction3(someParams);
* 7 }
* 8
*/
public class SolveIfElseOne {
//定义结构 属于工厂模式 基于java8 lambda
private static final Map<String, Consumer<String>> map=new HashMap<>();
//用LinkedHashMap 是为了保证有序性
private static final Map<Integer, Function<Integer,Double>> map1=new LinkedHashMap<>();
//初始化数据
static{
map.put("1",(param)->{doAction1(param);});
map.put("2",(param)->{doAction2(param);});
map.put("3",(param)->{doAction3(param);}); map1.put(2200,(param)->{return doAction2200(param);});
map1.put(2700,(param)->{return doAction2700(param);});
map1.put(3200,(param)->{return doAction3200(param);});
} /**
* 未重构前
*/
public void handle(String param){
if (param.equals("1")) {
doAction1(param);
} else if (param.equals("2")) {
doAction2(param);
} else if (param.equals("3")) {
doAction3(param);
}
} public static void doAction1(String param){
System.out.println(param);
} public static void doAction2(String param){
System.out.println(param);
} public static void doAction3(String param){
System.out.println(param);
} //未重构前
/* 1 if income <= 2200
2 tax = 0
3 else if income <= 2700
4 tax = 0.14 * (income - 2200)
5 else if income <= 3200
6 tax = 70 + 0.15 * (income - 2700)
7 else if income <= 3700
8 tax = 145 + 0.16 * (income - 3200)
9 ......
10 else
11 tax = 53090 + 0.7 * (income - 102200)*/ public static double doAction2200(int income){
double tax = 0;
return tax = 0;
} public static double doAction2700(int income){
double tax = tax = 0.14 * (income - 2200);
return tax ;
} public static double doAction3200(int income){
double tax = 70 + 0.15 * (income - 2700);
return tax;
} //重构后 只需要循环一次即可
public static double getTax(int income){
double res=0;
for(Integer integer:map1.keySet()){
if(income<=integer) {
System.out.println(integer+" ");
res=map1.get(integer).apply(income);
System.out.println(map1.get(integer).apply(income)+" ");
break;
}
}
return res;
} public static void main(String[] args) {
SolveIfElseOne.map.get("1").accept("1"); System.out.println(getTax(3200)); } }
实战if-else 过多详解的更多相关文章
- Linq实战 之 DataSet操作详解
Linq实战 之 DataSet操作详解 一:linq to Ado.Net 1. linq为什么要扩展ado.net,原因在于给既有代码增加福利.FCL中在ado.net上扩展了一些方法. 简单一 ...
- IdentityServer4实战 - JWT Token Issuer 详解
原文:IdentityServer4实战 - JWT Token Issuer 详解 一.前言 本文为系列补坑之作,拖了许久决定先把坑填完. 下文演示所用代码采用的 IdentityServer4 版 ...
- Java工程师 基础+实战 完整路线图(详解版)
Java工程师 基础+实战 完整路线图(详解版) Java 基础 Java 是一门纯粹的面向对象的编程语言,所以除了基础语法之外,必须得弄懂它的 oop 特性:封装.继承.多态.此外还有泛型.反射 ...
- SpringCloud微服务项目实战 - API网关Gateway详解实现
前面讲过zuul的网关实现,那为什么今天又要讲Spring Cloud Gateway呢?原因很简单.就是Spring Cloud已经放弃Netflix Zuul了.现在Spring Cloud中引用 ...
- SVN与TortoiseSVN实战:文件加锁详解
硬广:<SVN与TortoiseSVN实战>系列已经写了八篇,本篇是完结篇,整个系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解,以技巧性为主. 本篇详解使用Tortoi ...
- Asp.Net Core 中IdentityServer4 实战之角色授权详解
一.前言 前几篇文章分享了IdentityServer4密码模式的基本授权及自定义授权等方式,最近由于改造一个网关服务,用到了IdentityServer4的授权,改造过程中发现比较适合基于Role角 ...
- maven实战(02)_坐标详解
(一) 何为mave坐标 maven的世界中拥有数量非常巨大的构件,也就是平时用的一些jar,war等文件. maven定义了这样一组规则: 世界上任何一个构件都可以使用Maven坐标唯一标志,ma ...
- ios开发——实战OC篇&FMDB详解
FMDB详解 前一篇文章中我们介绍的SQLite的使用,在iOS中原生的SQLite API在使用上相当不友好. 于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.Plausibl ...
- Jmeter(七) - 从入门到精通 - 建立数据库测试计划实战<MySQL数据库>(详解教程)
1.简介 在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,上一篇文章宏哥主要介绍了jmeter连接和创建数据库测试计划的过程,宏哥在文中通过示例和代码非常 ...
随机推荐
- Natas5 Writeup(Cookie伪造)
Natas5: 提示不允许进入,没有登录,burp抓包,查看cookie信息后发现存在loggedin项,且值为0,猜测该值代表是否登录,将其修改为1,得到flag. flag:aGoY4q2Dc6M ...
- 入门Python实现七夕表白神器
from PIL import Image, ImageDraw, ImageFont font_size = 7 #This var can change the Word's blank size ...
- hbase 面试问题汇总
一.Hbase的六大特点: (1).表大:一个表可以有数亿行,上百万列. (2).无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态增加,同一个表中的不同行的可以有截然不同的列. (3) ...
- MySQL到底能有多少个字段
今天技术讨论群里 “一切随遇而安”同学看书时出现一个疑问,一个MySQL的表中到底可以有多少个字段?带着这个疑问,我们展开了探讨,也接着讨论了一个单字段长度的问题. 1. 官方文档说明 官方文档的内 ...
- OpenCV-Python 图像的几何变换 | 十四
目标 学习将不同的几何变换应用到图像上,如平移.旋转.仿射变换等. 你会看到这些函数: cv.getPerspectiveTransform 变换 OpenCV提供了两个转换函数cv.warpAffi ...
- PyTorch1.2.0版本来啦!居然还有全套视频!让你快速熟练掌握深度学习框架!
[翻到文末, 还能让你看尽CV和NLP完整技术路径以及前沿+经典论文篇目,助你构建深度学习知识框架] 今年8月!PyTorch 1.2.0 版本来啦!! 据我们了解,在学术领域,特别是CV/NLP方向 ...
- Java并发编程锁之独占公平锁与非公平锁比较
Java并发编程锁之独占公平锁与非公平锁比较 公平锁和非公平锁理解: 在上一篇文章中,我们知道了非公平锁.其实Java中还存在着公平锁呢.公平二字怎么理解呢?和我们现实理解是一样的.大家去排队本着先来 ...
- SpringBoot 监控中心
1,SpringBoot 监控中心: 针对微服务服务监控,服务器内存内存变化(对内存,线程,日志管理),检测服务配置连接地址是否可用(模拟访问,懒加载),故意将mysql 数据源连接密码写错,启动就会 ...
- JUnit白盒测试之基本路径测试:三次找到假球
前言 记录一次软件测试课程的课后作业,作业内容是白盒测试中的基本路径测试,步骤如下 分析程序的控制流 计算环形复杂度 找出基本路径 设计测试用例 执行测试用例(要求使用JUnit) 作业要求 使用白盒 ...
- python数据分析工具 | matplotlib
不论是数据挖掘还是数学建模,都免不了数据可视化的问题.对于 Python 来说,matplotlib 是最著名的绘图库,它主要用于二维绘图,当然也可以进行简单的三维绘图.它不但提供了一整套和 Matl ...