前言:博主之前写了一篇博客 :
【java】 java开发中 常遇到的各种难点 思路方案
上述博客主要描述的是该如何解决疑难场景,接下来博主带来姊妹篇,将针对用常规方式写出来的代码不太好看、效率不太高的场景 阐述该如何编写一些更加优雅的代码。
文章目录
- 如何封装if的非空校验
- 如何封装if return
- Optional orElseThrow如何记录错误日志
- 如何避免字段名被修改无法感知问题 如何避免魔法值
- list如何存取一个元素
- 如何简洁的往list里面添加有限个数元素
- map如何存取一个键值对
- 如何简洁的往map里面添加有限个数元素
- 如何批量删除mysql中某前缀开头的表
如何封装if的非空校验
(注:@valid不是阐述重点,主要讲述如何封装if )
什么叫封装if呢 比如我们要判断名字是否为空 常规写法:
讯享网还可能需要校验住址:
讯享网
在很多业务场景中,可能需要大量的判断,那就会导致大量的if 以及大括号 ,非常占用代码行数,那我们该如何简化呢?可以如下的写一个方法:
调用方使用:
讯享网
这样在业务流程代码 就不会看到大量的if以及大括号了,当然 针对不同类型的参数进行非空校验、是否相等校验 按照checkBlank方法自己去拓展就好了。
如何封装if return
我们以mybatis plus为例,in查询时,如果in参数为空数组 查询会报错
传统校验写法:
封装if return写法:
MybatisPlusUtils:
或者
utils则对应为:
Optional java开发实例源码基础篇 orElseThrow如何记录错误日志
我们传统的orElseThrow可能就是抛一个异常:

有时候为null就是严重的业务异常 需要事后通过日志排查,我们可能需要记录详细的日志信息 我们只需要在箭头后面加上大括号,并在抛异常前记录日志即可 对lambda熟悉的同学应该比较容易想到,如果lambda不熟练可能会不知道如何写。
如何避免字段名被修改无法感知问题 如何避免魔法值
某个类的字段名修改了 其它地方可能不知道 解决方法 : 使用Function转换 ,这样不仅可以避免下游无法感知字段名变更的问题 也可以避免魔法值。
让我们用个例子来说明是什么意思: 比如我们的Oper实体类里面 有一个ukKey字段,我们在某个地方 将ukKey作为key 存放到map中,某一天 团队中其他人修改了这个字段名,比如改成了uniqueKey,这个时候map的key值 极大可能就会被疏忽。
转换代码:
java中使用groovy脚本时,上述方法不适用,groovy版:
list如何存取一个元素
但是需要注意的是 SingletonList是一个私有内部类;
所以Collections.singletonList返回的是父类List,即使是一个元素 我们获取还是要用 list.get(0) , 而不能直接使用 list.get()。
JDK中既然没有提供简便的方法,我们可以自己简单包装一下:
这样我们就可以使用自定义的SingleElementList类:
如何简洁的往list里面添加有限个数元素
按照常规写法,我们可能是先new ArrayList() ; 接着往list里面逐个add,这样也会导致add的行数较多;我们可以通过更简洁的方式:
注意:上述方式的list都不能remove 是不可变的,我们一般都过这种方式添加元素 基本上都是作为返回结果的 业务上已经确保不会remove了。

List.of 也是类似的,就不再分析了。
map如何存取一个键值对
只有一个键值对的时候 也使用hashmap来存取,就会导致虽然只有一个entry ,但也必须 get(key) 或遍历entrySet来取值,那有没有什么办法 我们不用传入任何参数 也可以直接getKey呢?
我们可以使用java.util下的AbstractMap.SimpleEntry来解决这个问题:
注: AbstractMap.SimpleEntry 是 Map.Entry的一个实现类,
如果我们想通过fastjson来转型,需要指定类型为Map.Entry , 并不支持AbstractMap.SimpleEntry (且fastjson版本需要>= 1.2.24)
代码示例如下:
如何简洁的往map里面添加有限个数元素
如何批量删除mysql中某前缀开头的表
用上述语句 就可以得到所有以 table_prefix开头表的drop删除语句,我们可以在navicat中全选复制并手动执行

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/8431.html