首页 > 编程语言 >Java8-Predicate 策略模式的替代品消灭 if else

Java8-Predicate 策略模式的替代品消灭 if else

时间:2023-06-14 13:56:13浏览次数:48  
标签:Predicate return isNotBlank service else predicateMap StringUtils Java8

使用策略模式消灭if else,可以利用Java8的新特性来实现策略模式。
利用Java8的Predicate消灭 if else。首先定义一个map,key是不同的服务代码,value是需要做校验的条件,然后针对不同的服务代码做校验。当然Supplier、Consumer都可以做类似的实现。

// 定义校验的策略映射关系
static Map<String, Predicate<Model>> predicateMap = new HashMap<>();

 static {
        predicateMap.put("A", s -> {
            return StringUtils.isNotBlank(s.getName())
                    && (StringUtils.isNotBlank(s.getAge()) || StringUtils.isNotBlank(s.getPhone()));
        });
        predicateMap.put("B", s -> {
            return StringUtils.isNotBlank(s.getName())
                    && StringUtils.isNotBlank(s.getPhone());
        });
    }
    
 public static void main(String[] args) {
        List<String> codes  = Lists.newArrayList("A","B");
        for (String service : codes) {
            if (!predicateMap.containsKey(service)) {
                failResponse.setResultMsg("代码" + service + "未上线");
                return failResponse;
            }
            boolean test = predicateMap.get(service).test(s);
            if (!test) {
                failResponse.setResultMsg("代码" + service + "入参校验失败");
                return failResponse;
            }
        }
    }
}

标签:Predicate,return,isNotBlank,service,else,predicateMap,StringUtils,Java8
From: https://www.cnblogs.com/ByteSpaceX/p/17479977.html

相关文章

  • Java8-并行流的使用
    Java8中的并行流使用publicclassStreamTest{publicList<Person>constructPersons(){List<Person>persons=newArrayList<Person>();for(inti=0;i<5;i++){Personp=newPerson(i,"name"+......
  • Java9比Java8改进了什么
    1)引入了模块系统,采用模块化系统的应用程序只需要这些应用程序所需的那部分JDK模块,而非是整个JDK框架了,减少了内存的开销。2)引入了一个新的package:java.net.http,里面提供了对Http访问很好的支持,不仅支持Http1.1而且还支持HTTP2。3)引入了jshell这个交互性工具,让Java也可以像脚本......
  • JAVA8 十大新特性详解
    一、接口的默认方法Java8允许我们给接口添加一个非抽象的方法实现,只需要使用default关键字即可,这个特征又叫做扩展方法,示例如下:代码如下:interfaceFormula{   doublecalculate(inta);    defaultdoublesqrt(inta){       returnMath.sqrt(a); ......
  • Java8 Stream List Map:Stream 流对象汇总 求和 某个属性 BigDecimal MDouble
    测试实体(数字对象使用MDouble):importcom.mchweb.common.lang.MDouble;importlombok.*;@Getter@Setter@Builder(toBuilder=true)@NoArgsConstructor@AllArgsConstructorpublicclassUser{privateMDoublemoney;}importcom.mchweb.common.lang.MDouble;imp......
  • java8随手记(包含idea连接远程分支出现Nothing to update问题)
    Steam流一、映射1.map()和.flatMap()map将数据放入集合中,返回Steam流中。例如:map集合{1,2,3},返回Steam流[a,b,c,{1,2,3}]flatMap将将集合中的数据,返回Steam流中.例如:flatMap集合{1,2,3},返回Steam流中[a,b,c,1,2,3]注意:add与addAll有同样的效果。   ......
  • java8 日期 API
    获取时间LocalDatelocalDate=LocalDate.now();LocalDateTimelocalDateTime=LocalDateTime.now();LocalDatetoday=LocalDate.of(2023,6,12);方法名描述dayofWeekInMonth创建一个新的日期,值为同一个月中每一周的第几天firstDayOfMonth创建一个新的日期......
  • shell中if else if的写法,if elif
    需求描述:在写shell脚本的过程中,用到了ifelse的写法,突然有多个参数需要判断那么就想到了ifelseif的用法,于是进行如下的测试。测试过程:1.写如下的测试脚本,进行多个值的判断#!/bin/bashif[[$1='tomcat']];thenecho"Inputistomcat"elseif[[$1=......
  • Java8新特性Stream之list转map及问题解决
    List集合转Map,用到的是Stream中Collectors的toMap方法:Collectors.toMap具体用法实例如下://声明一个List集合Listlist=newArrayList();list.add(newPerson("1001","小A"));list.add(newPerson("1002","小B"));list.add(......
  • Python中带else子句的for循环执行过程
    这几天在厦门讲课,每天6小时,没有太多时间写新代码,宾馆不知道咋想的也不提供WiFi,只好用手机做个热点临时分享一点基础知识,300M的包月流量伤不起,热点瞬间就把仅剩的40M流量用完了,赶紧发完关闭热点。在Python中,有while和for两种循环,并且都可以带有else子句。其中while循环常用于无法提......
  • Python中else关键字的常见用法
    Python中的else常见用法有三:选择结构、循环结构和异常处理结构。(1)选择结构这应该是最常见的用法,与关键字if和elif组合来使用,用来说明条件不符合时应执行的代码块。(2)循环结构Python中的for循环和while循环都可以带else子句,如果循环是因为条件不再成立而自然结束时会执行else中的代码......