java8 if else 参数校验优化

告别if-else!用Java 8的Predicate重构你的业务校验逻辑(实战案例) 本文介绍了如何利用Java 8的Predicate接口重构复杂的业务校验逻辑,告别传统的if-else语句。通过实战案例,展示了Predicate的组合性、可测试性和可读性优势,帮助开发者提升代码质量与维护效率。 阅读详情

最近项目 controller 比较烦恼 if else 的参数判断,网上找了一些相关的优化文章,但始终没有比较心仪的。但他们都给了我不错的启发,在此非常感谢,嗯,如果也有伙伴在烦恼参数的判断,可以往这边看看


package com.yianjia.common.utils;

import java.util.function.Function;

/**
 * @author zengqinghua
 */
public class ParamValid<T> {

    private T t;

    public ParamValid() {
    }

    public ParamValid(T t) {
        this.t = t;
    }

    public static <T> ParamValid<T> init(T t) {
        ParamValid<T> paramValid = new ParamValid<T>(t);
        return paramValid;
    }

    public Object end(Function<T, Object> function) {
        return function.apply(t);
    }

    /**
     * 校验(true的话校验不通过)
     *
     * @return ParamValid
     */
    public ParamValid<T> valid(Function<T, Boolean> function) {
        if (function.apply(t)) {
            throw new IllegalArgumentException("参数错误");
        }
        return this;
    }

    /**
     * 校验(true的话校验不通过,错误信息)
     *
     * @return ParamValid
     */
    public ParamValid<T> valid(Function<T, Boolean> function, String message) {
        if (function.apply(t)) {
            throw new IllegalArgumentException(message);
        }
        return this;
    }

    /**
     * 校验(true的话校验不通过,错误信息)
     *
     * @return ParamValid
     */
    public ParamValid<T> valid(boolean condition, Function<T, Boolean> function, String message) {
        if (!condition) {
            return this;
        }
        if (function.apply(t)) {
            throw new IllegalArgumentException(message);
        }
        return this;
    }
}

使用方式

public String validOrderCreateOrEditParam(OrderParam orderParam) {
        try {
            ParamValid.init(orderParam)
                    .valid(param -> !"上门提货".equals(param.getTihuoClaim()) && !"不提货".equals(param.getTihuoClaim()), "提货要求错误")
                    .valid(param -> !systemConfigUtils.songhuoClaimList.contains(param.getSonghuoClaim()), "送货要求错误")
            ;
        } catch (IllegalArgumentException e) {
            return e.getMessage();
        }
        return null;
    }

OrderParam 换成你们需要判断的对象就好啦

String errorMsg = validOrderCreateOrEditParam(orderParam);
if (null != errorMsg) {
    return R.error(null, errorMsg);
}

当校验不通过的时候,就会返回指定的错误

彻底消灭if-else嵌套 compute(Double amount):各计费规则的抽象getType():获取枚举中维护的会员级别/*** 计费规则* @param amount 会员的交易金额* @return*//*** 获取会员级别* @return*/两种方案主要参考了设计模式中的策略模式系统中有很多类,而他们的区别仅仅在于他们的行为不同。一个系统需要动态地在几种算法中选择一种。 阅读详情

相关推荐

告别满屏if-else!Spring Boot项目里用javax.validation注解优雅校验参数(附完整异常处理)

本文介绍了如何在Spring Boot项目中使用javax.validation注解优雅地校验参数,避免满屏if-else语句。通过声明式参数校验和全局异常处理,开发者可以简化代码结构,提升开发效率和可维护性。文章详细讲解了常用注解如@NotNull、@NotBlank的应用,并提供了完整的异常处理方案。

weixin_30908941的博客 352

使用JAVA 8的Optional做参数校验

当参数校验不通过,你不想抛出Exception时,也可以考虑使用Optional类来实现,由调用方去处理错误信息。

Sam_Deep_Thinking 738

稳定双共轭梯度法BiCGSTAB流程

稳定双共轭梯度法BiCGSTAB流程

abner361的博客 1154

利用JDK8提供的Optional简化if else

程序猿开日常开发中,为了避免NullPointerException异常,会写很多if else的判断。如果if else太多会让代码显的很乱,那如何减少if else的使用呢? 减少if else的方式之一,利用JDK8提供的Optional。 代码示例: 示例中getStartTime()获取String类型的时间字符串并返回。执行逻辑: 调动selectStartTime()查询DB返回LocalDateTime值; 响应值dateTime如果为null,就给一个默认值; 响应值dateTime

WLQ0621的博客 3122

AI Agent在营销领域的实战策略

本文从第一性原理出发,系统性拆解AI Agent在营销领域的落地逻辑、技术架构、实现方案与实战策略。全文覆盖从基础概念到高级优化的全层级知识:底层理论层面推导营销Agent的效用函数与决策框架;技术架构层面提出"感知-记忆-规划-行动-反思"五组件可落地架构;实践层面提供生产级代码实现、多行业案例与ROI提升方法论;前沿层面探讨多Agent协同、世界模型仿真等下一代技术方向。

操作系统内核探秘的博客 226

龙头复盘神器/复盘于导出工具最新版5.6

龙头复盘神器,复盘于导出工具

初入python踩过的坑 8226

java校验过多导致效率问题怎么优化

优化相关视频讲解:深度学习入门:梯度下降通俗解释优化Java校验过多导致效率问题 在Java开发过程中,我们经常需要对数据进行校验,以确保数据的合法性和稳定性。然而,如果校验逻辑过多或者校验方法过于复杂,就会导致程序效率低下,影响系统的性能。本文将讨论如何优化Java校验过多导致的效率问题,并提供示例。 问题分析 当我们...

weixin_36354131的博客 403

【WRF-Chem】预处理工具(Preprocessors)总结

预处理工具(Preprocessors)总结

WW、forever的博客 1179

JAVA中对参数对象进行校验的工具类

理解、学习与使用 JAVA 中的 OPTIONAL Google Guava 优雅的参数验证(Preconditions)

qq_40091033的博客 982

零基础做完YOLOv8船只检测系统:HRSC2016数据集 + 完整UI,稳过答辩

亲爱的同学,通过这篇教程,你已经掌握了“基于YOLOv8的HRSC2016微小船只检测系统”从数据集处理、模型训练到Tkinter界面开发的全流程。这个课题既贴合“海事智能化”的产业战略,又涵盖了“目标检测、深度学习、界面开发”等多个毕设评分点,非常适合作为计算机或海事工程专业的毕业设计。在实践中,你可能会遇到“海面背景复杂导致船只漏检”“微小船只识别精度不足”“UI与模型推理同步卡顿”等挑战——别担心,这些都是技术成长的必经之路。

FJN110的博客 107

7.6 GPU页表更新机制

本文分析了AMDGPU驱动中BO到VA映射的页表更新实现机制。核心流程通过amdgpu_vm_bo_update()函数触发,支持CPU直接写入和SDMA异步命令两种更新模式。系统根据VRAM可见性自动选择最优更新策略,处理三种主要场景:命令提交、BO迁移和BO销毁。关键实现包括DMA地址数组处理、权限标志合并和BO迁移状态转换,最终通过amdgpu_vm_update_range()完成硬件页表更新。该机制有效平衡了更新延迟与吞吐量,为GPU虚拟内存管理提供基础支撑。

图形/计算GPU的驱动与虚拟化技术分享园地 2460

Java中如何消除过多条件判断

Java中如何消除过多条件判断 条件判断结构是任何语言中的关键内容。但是如果编写了大量嵌套if语句,会使得代码更加复杂和难以维护。本文提供多种方式代替嵌套if语言,使代码更简洁。 案例说明 通常我们遇到涉及很多条件的业务逻辑,每个条件需要处理不同逻辑。为了演示方便,我们使用Calculator类,其中计算方法带两个操作数和一个操作符作为输入参数并返回操作结果: public int calcula...

neweastsun的专栏 1万+

ArcGIS Pro 制作这种地图海报

ArcMap 版本与 ArcGIS Pro 版本的制图功能相差太多,无论从美观上还是制图效率都远远优于 ArcMap,用了一段时间的 ArcGIS Pro ,真心推荐有条件的大家赶紧试一试!一个软件也能搞定一张不错的海报哦!----吐槽:好的设计真的是门花时间的活,这个教程大概花了我7小时左右,我都忘了我自己教程中截图多少张了!(可能是我速度太慢了)测试数据:阿里云盘分享-----北极海冰数据.https://www.aliyundrive.com/s/SUhsnqfkmXh。

J_Giser的博客 1427

JAVA 使用实用的参数判空技巧Optional与@Valid,告别if 和else

在日常搬砖的日子里,对参数判空是司空见惯的一个环节。 如以下的这种接口: @GetMapping("/getMyParam") public void test(@RequestParam Map paramMap) { String name=null; if (null!=paramMap.get("name")){ ...

默默不代表沉默 5494

如何在白平衡标定种构建不同类型的白平衡色温坐标系

以各家芯片方案的白平衡色温坐标系为切入点,详细介绍了各家芯片色温坐标系构建的理论依旧;并解析了不同色温坐标系下的物理含义,提提出了多种不同的色温坐标系

大熊 959

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java if else 过多_如何解决代码中过多的 if else ?

先来一张镇楼图感受一下 if else 的魔法吧。一、由一个几百行 if 引发的思考有个场景,50张字典表,需要为其他服务提供一个统一的接口来校验用户输入的字典表 id 是否合法。校验逻辑已经很清晰了,根据参数选择对应的表校验 id 是否存在。if("table_a".equals(table)) {// check id}if("table_b".equals(table)) {// check...

weixin_31433527的博客 1202

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

注解式参数校验@Valid,拒绝if-else炼狱

在软件开发中,与客户进行数据的交互是比较频繁的数据采集方式,而为了确保数据的正确落库,数据校验的部分必不可少。参数校验具体指的是对输入数据的大小、类型、正则匹配等对数据本身属性的校验,这一块的校验通常是在前端进行第一轮校验,确保参数具备一定逻辑正确性才将其打包至后端处理,而为了进一步增强安全性,也同样需要在后端板块进行二次校验。而对于此类校验,最常见也是最臃肿的处理方案就是if-else炼狱。

BASK2311的博客 513

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java If-Else 优化方案

当代码已经复杂到难以维护的程度之后,只能狠下心重构优化。那,有什么方案可以优雅的优化掉这些多余的if/else? 1. 提前return 这是判断条件取反的做法,代码在逻辑表达上会更清晰,看下面代码: if (condition) { // do something } else { return xxx; } 其实,每次看到上面这种代码,心里就抓痒,完全可以先判断!condition,干掉else。 if (!condition) { return xxx; } // do someth

极客神殿 2780

java if优化_面试被问到如何优化掉多余的if/else?程序员小伙:直接开头return

前期迭代懒得优化,来一个需求,加一个if,久而久之,就串成了一座金字塔。当代码已经复杂到难以维护的程度之后,只能狠下心重构优化。那,有什么方案可以优雅的优化掉这些多余的if/else?1. 提前return这是判断条件取反的做法,代码在逻辑表达上会更清晰,看下面代码:if (condition) { // do something} else { return xxx;}其实,每次看到上面这种代...

weixin_33334565的博客 461

java多态优化多个if_面试官:优化代码中大量的if/else,你有什么方案?

一个快速迭代的项目,时间久了之后,代码中可能会充斥着大量的if/else,嵌套6、7层,一个函数几百行,简!直!看!死!人!这个无限循环嵌套,只是总循环的一部分。。。我已经绕晕在黄桷湾立交仔细数了数,一共有 11 层的嵌套!!!接手这种项目的同学,内心应该是绝望的。出现这种情况的原因很多设计不够完善需求考虑不完全开发人员变动但最为致命的是“懒”你懒,我也懒,前期迭代懒得优化,来一个需求,加一个if...

weixin_42134537的博客 4919

怎么优化大量的if判断_面试官:优化代码中大量的if/else,你有什么方案?

一个快速迭代的项目,时间久了之后,代码中可能会充斥着大量的if/else,嵌套6、7层,一个函数几百行,简!直!看!死!人!这个无限循环嵌套,只是总循环的一部分。。。我已经绕晕在黄桷湾立交仔细数了数,一共有 11 层的嵌套!!!接手这种项目的同学,内心应该是绝望的。出现这种情况的原因很多设计不够完善需求考虑不完全开发人员变动但最为致命的是“懒”你懒,我也懒,前期迭代懒得优化,来一个需求,加一个if...

weixin_33476149的博客 2067

xml中else if写法_面试官:优化代码中大量的if/else,你有什么方案?

一个快速迭代的项目,时间久了之后,代码中可能会充斥着大量的if/else,嵌套6、7层,一个函数几百行,简!直!看!死!人!这个无限循环嵌套,只是总循环的一部分。。。我已经绕晕在黄桷湾立交仔细数了数,一共有 11 层的嵌套!!!接手这种项目的同学,内心应该是绝望的。出现这种情况的原因很多设计不够完善需求考虑不完全开发人员变动但最为致命的是“懒”你懒,我也懒,前期迭代懒得优化,来一个需求,加一个if...

weixin_39761195的博客 821

优化if else代码的8种实用技巧与设计模式应用

条件判断是编程中的基础概念,但过多的if else嵌套会导致代码可读性和维护性急剧下降。从计算机科学原理看,每个条件分支都会增加代码的圈复杂度,影响分支预测效率。通过策略模式、状态模式等设计模式重构,不仅能提升代码质量,还能获得更好的扩展性。在实际工程中,电商促销计算、订单状态流转等场景特别适合应用这些优化技巧。合理使用函数式编程和表驱动法等现代编程技术,可以在保持代码简洁的同时处理复杂业务逻辑。本文案例显示,经过优化的代码通常能减少40%的代码量,性能提升可达15%。

weixin_34109408的博客 320

面试官:优化代码中大量的if/else,你有什么方案?

一个快速迭代的项目,时间久了之后,代码中可能会充斥着大量的if/else,嵌套6、7层,一个函数几百行,简!直!看!死!人!这个无限循环嵌套,只是总循环的一部分。。。我已...

阿杜的世界 416

如何解决代码中过多的 if else ?

先来一张镇楼图感受一下 if else 的魔法吧。 一、由一个几百行 if 引发的思考 有个场景,50张字典表,需要为其他服务提供一个统一的接口来校验用户输入的字典表 id 是否合法。 校验逻辑已经很清晰了,根据参数选择对应的表校验 id 是否存在。 if("table_a".equals(table)) { // check id } if("table_b".equals(table)) { // check id ..

qq_23696693的博客 1664

if和else同时执行_如何解决代码中过多的 if else ?

先来一张镇楼图感受一下 if else 的魔法吧。 一、由一个几百行 if 引发的思考 有个场景,50张字典表,需要为其他服务提供一个统一的接口来校验用户输入的字典表 id 是否合法。 校验逻辑已经很清晰了,根据参数选择对应的表校验 id 是否存在。 if("table_a".equals(table)) { // check id } if("table_b"....

weixin_39562327的博客 925
下一篇: centos7.6 安装 docker 就是这么简单?
97牛肉面
博客等级 码龄9年 54粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值