Java集合为空校验

本文分享了关于HashMap使用的最佳实践,包括如何高效迭代Map的entrySet,以及使用Objects.isNull和CollectionUtils.isEmpty方法检查Map是否为空的技巧。通过具体代码示例和运行结果,帮助读者理解不同场景下Map的操作细节。

工作这么多年,一直没有提高代码质量,从今天这篇博客起步,努力提高自己水平。

不多说,直接 上代码:

    static Map<String,Object> m = null;
    static Map<String,Object> mm = new HashMap<>();
    static Map<String,Object> map = new HashMap<>();

    /**
     * 迭代 entrySet() 才是更高效的做法
     */
    public static void mapTest(){
        map.put("1","111");
        map.put("2","222");
        for (Map.Entry<String,Object> entry : map.entrySet()){
            System.out.println(entry.getKey());
            System.out.println(entry.getValue());
        }
    }

    public static void utilTest(){
        System.out.println("Objects.isNull校验为 null 的map是否为空:"+Objects.isNull(m));

        System.out.println("Objects.isNull校验为 new HashMap 且没有值 的map是否为空:"+Objects.isNull(mm));

        System.out.println("Objects.isNull校验为 new HashMap 且有数据项 的map是否为空:"+Objects.isNull(map));

        System.out.println("CollectionUtils.isEmpty校验为 null 的map是否为空:"+CollectionUtils.isEmpty(m));

        System.out.println("CollectionUtils.isEmpty校验为 new HashMap 且没有值  的map是否为空:"+CollectionUtils.isEmpty(mm));

        System.out.println("CollectionUtils.isEmpty校验为 new HashMap 且有数据项 的map是否为空:"+CollectionUtils.isEmpty(map));

        try{
            System.out.print("集合中isEmpty方法校验为 null 的map是否为空:");
            System.out.print(m.isEmpty());
        }catch (Exception e){
            System.out.print("      报错了,m只是引用,其值为null,并不是真正的Map,没有isEmpty方法,错误信息为:"+e);
            System.out.println();
        }

        System.out.println("集合中isEmpty方法校验为 new HashMap 且没有值  的map是否为空:"+mm.isEmpty());

        System.out.println("集合中isEmpty方法校验为 new HashMap 且有数据项 的map是否为空:"+map.isEmpty());
    }

    public static void main(String[] args) {
        BaseClass.mapTest();

        BaseClass.utilTest();

    }

最终运行结果为:

你 get 到了吗?

### 关于使用 `@Valid` 校验集合是否为的方法 在 Spring 框架中,如果希望对集合类型的参数进行校验(例如判断集合是否为),可以通过以下方式实现: #### 方法一:使用 `@NotEmpty` 或 `@Size` 注解 对于集合类型字段,可以直接在其上添加 `javax.validation.constraints.NotEmpty` 或 `javax.validation.constraints.Size` 注解来完成校验。这些注解能够确保集合本身不为 null 并且至少包含一个元素。 以下是基于上述需求的一个示例代码片段: ```java import javax.validation.constraints.NotEmpty; import java.util.List; public class OrderRequest { @NotEmpty(message = "订单列表不能为") private List<Order> orders; // Getter 和 Setter 方法省略 } ``` 当客户端传递的数据不符合约束条件时,Spring MVC 的全局异常处理器会捕捉到 `MethodArgumentNotValidException` 异常并将错误消息返回给调用方[^2]。 #### 方法二:结合 `@Validated` 实现更灵活的校验逻辑 虽然单独使用 `@Valid` 可以满足基本的需求,但在某些复杂场景下可能显得不够强大。此时推荐引入 Spring 自定义注解 `@Validated` 来增强功能。需要注意的是,在 Controller 层面上标注该注解之后还需要额外配置 Bean Validation 支持才能生效[^3]。 下面是一个完整的例子展示如何利用这两种机制共同作用达到目的: ```java @RestController @RequestMapping("/orders") @Validated public class OrderController { @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<String> createOrders(@RequestBody @Valid OrderRequest request){ return new ResponseEntity<>("Success", HttpStatus.OK); } } @Data static class OrderRequest { @NotEmpty(message="Order list must not be empty.") private List<@NotBlank String> orderIds; } ``` 以上设置意味着任何向 `/orders` 发送 POST 请求而未提供有效负载的行为都将触发验证失败响应,并附带相应提示信息[^4]。 另外值得注意的一点是关于 Hibernate Validator 版本兼容性问题可能导致部分特性表现异常的情况,请参照具体文档调整依赖版本号以获得最佳体验效果[^5]。 ### 总结 综上所述,要实现针对集合类别的非检测操作,最简便直接的方式便是运用标准 JSR-303 API 中预定义好的限定符如 `@NotEmpty` 或者设定长度区间限制通过 `@Size(min=1)` 达成目标;与此同时考虑到实际开发过程中可能会遇到更加精细化控制诉求,则可考虑采纳 Spring 提供扩展版解决方案即采用 `@Validated` 替代传统意义上的单纯依靠 `@Valid` 完成功能覆盖。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值