首页 > 其他分享 >Map+函数式接口去掉if-else

Map+函数式接口去掉if-else

时间:2023-12-26 14:36:01浏览次数:29  
标签:Map return String resourceId 接口 else springframework import public

  1. 判断条件放在key中
  2. 对应的业务逻辑放在value中

这样子写的好处是非常直观,能直接看到判断条件对应的业务逻辑

代码:

import com.wing.service.QueryGrantTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GrantTypeController {

    @Autowired
    private QueryGrantTypeService queryGrantTypeService;

    @PostMapping("/grantType")
    public String test(String resourceName){
        return queryGrantTypeService.getResult(resourceName);
    }
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

@Service
public class QueryGrantTypeService {

    /**
     * 是在dispatcherInit()方法之前
     */
    @Autowired
    private GrantTypeSerive grantTypeSerive;
    private Map<String, Function<String,String>> grantTypeMap=new HashMap<>();

    /**
     *  初始化业务分派逻辑,代替了if-else部分
     *  key: 优惠券类型
     *  value: lambda表达式,最终会获得该优惠券的发放方式
     *
     *  被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。
     *  PostConstruct在构造函数之后执行,init()方法之前执行。
     *  也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如数据字典之类的。
     */
    @PostConstruct
    public void dispatcherInit(){
        grantTypeMap.put("红包",resourceId->grantTypeSerive.redPaper(resourceId));
        grantTypeMap.put("购物券",resourceId->grantTypeSerive.shopping(resourceId));
        grantTypeMap.put("qq会员",resourceId->grantTypeSerive.QQVip(resourceId));
    }

    public String getResult(String resourceType){
        //Controller根据 优惠券类型resourceType、编码resourceId 去查询 发放方式grantType
        Function<String,String> result=grantTypeMap.get(resourceType);
        if(result!=null){
            //传入resourceId 执行这段表达式获得String型的grantType
            String resourceId = "11";
            return result.apply(resourceId);
        }
        return "查询不到该优惠券的发放方式";
    }
}
//具体的逻辑操作

import org.springframework.stereotype.Service;

@Service
public class GrantTypeSerive {

    public String redPaper(String resourceId){
        //红包的发放方式
        return "每周末9点发放";
    }
    public String shopping(String resourceId){
        //购物券的发放方式
        return "每周三9点发放";
    }
    public String QQVip(String resourceId){
        //qq会员的发放方式
        return "每周一0点开始秒杀";
    }
}


标签:Map,return,String,resourceId,接口,else,springframework,import,public
From: https://blog.51cto.com/smallfa/8983309

相关文章

  • 自动化和API接口可以应用在哪些工作场景中?
    随着科技的不断进步和发展,新一代的网络安全技术也在不断涌现。其中,VMLogin指纹浏览器以其独特的自动化和API接口功能,为各行各业的网络安全和数据隐私保护提供了可靠的解决方案。一、自动化功能:任何具有重复性的工作可以在VMLogin通过自动化完成。您可以使用Selenium、Puppeteer、RE......
  • Odoo接口说明
    通过使用PostMan调用Odoo-POST{"jsonrpc":"2.0", "params":{ "db":"factory", "login":"[email protected]", "password":"1"}}通过上面Josn格式调用系统......
  • 防重复接口请求
    packagecom.qz.springcloud.school.brain.core.repeat;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Collections;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjavax.servlet.ServletRequest;importj......
  • 两个视图基类 快速实现publish的5个接口 9个视图子类
    1两个视图基类#APIView--->之前一直在用---》drf提供的最顶层的父类---》以后所有视图类,都继承自它#GenericAPIView--》继承自APIView--》封装1.1继承APIView+序列化类+Response写接口urls.py--子路由--app01--urls.pyfromdjango.contribimportadminfromdjango.ur......
  • Roaring bitmaps
    Roaringbitmaps最近看一篇文章,里面涉及到使用roaringbitmaps来推送用户广告并通过计算交集来降低用户广告推送次数。本文给出roaringbitmaps的原理和基本用法,后续给出原文的内容。本文来自:AprimeronRoaringbitmaps:whattheyareandhowtheywork目录Roaringbitmaps......
  • C 语言教程:条件和 if...else 语句
    C语言中的条件和if...else语句您已经学习过C语言支持数学中的常见逻辑条件:小于:a<b小于或等于:a<=b大于:a>b大于或等于:a>=b等于:a==b不等于:a!=b您可以使用这些条件来根据不同的决策执行不同的操作。C语言具有以下条件语句:使用if来指定要执行的代码块,......
  • C 语言教程:条件和 if...else 语句
    C语言中的条件和if...else语句您已经学习过C语言支持数学中的常见逻辑条件:小于:a<b小于或等于:a<=b大于:a>b大于或等于:a>=b等于:a==b不等于:a!=b您可以使用这些条件来根据不同的决策执行不同的操作。C语言具有以下条件语句:使用if来指定要执行的代码块......
  • 好用的接口自动化测试工具
    Apipost提供可视化的API自动化测试功能,使用Apipost研发人员可以设计、调试接口,测试人员可以基于同一数据源进行测试,Apipost接口自动化功能在上次更新中进行了逻辑调整,带来更好的交互操作、更多的控制器选择,同时新增同步接口模式选择、测试数据选择功能。添加接口使用Apipost,......
  • 分布式系统 9种实现接口幂等性方案
    在开发订单系统时,我们常遇见支付问题,既用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条。在以前的单应用系统中,我们只需要把数据操作放入事务中即可,发生......
  • ConcurrentHashMap从入门到入睡
    ConcurrentHashMap为什么使用ConcurrentHashMap前文提到,HashMap无论任何版本都是线程不安全的。但Hashtable会给整张表加悲观锁,仅允许单个线程独占,效率低下。synchronizedMap加入了互斥锁mutex,在方法上加上synchronized,效率同样不高。所以需要更低粒度的锁以换取更好的并......