You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java 8 Lambda结合Map重构if语句校验代码

使用Map与Lambda重构字段校验代码

原代码通过重复的if判断校验字段非空,复用性差且冗余。用Map存储字段提取逻辑和对应标识,结合Lambda遍历校验,能大幅简化代码,后续新增字段仅需在Map中添加条目即可。

重构方案一:直接映射字段获取器与错误信息

适合需要自定义不同错误信息的场景:

private void validateUserFields(User user) {
    Map<Supplier<Object>, String> fieldValidations = Map.of(
        user::getName, "The user's name cannot be null",
        user::getLastName, "The user's lastName cannot be null",
        user::getDni, "The user's dni cannot be null",
        user::getVehicle, "The user's vehicle cannot be null"
    );

    fieldValidations.forEach((fieldSupplier, errorMsg) -> {
        if (fieldSupplier.get() == null) {
            throw new RuntimeException(errorMsg);
        }
    });
}

重构方案二:统一错误信息格式

如果错误信息格式固定,可进一步简化,避免重复编写字符串:

private void validateUserFields(User user) {
    Map<Function<User, Object>, String> fieldValidations = Map.of(
        User::getName, "name",
        User::getLastName, "lastName",
        User::getDni, "dni",
        User::getVehicle, "vehicle"
    );

    fieldValidations.forEach((fieldExtractor, fieldName) -> {
        if (fieldExtractor.apply(user) == null) {
            throw new RuntimeException(String.format("The user's %s cannot be null", fieldName));
        }
    });
}

兼容Java 8的写法

若项目基于Java 8,Map.of()不可用,改用HashMap初始化:

private void validateUserFields(User user) {
    Map<Function<User, Object>, String> fieldValidations = new HashMap<>();
    fieldValidations.put(User::getName, "name");
    fieldValidations.put(User::getLastName, "lastName");
    fieldValidations.put(User::getDni, "dni");
    fieldValidations.put(User::getVehicle, "vehicle");

    fieldValidations.forEach((fieldExtractor, fieldName) -> {
        if (fieldExtractor.apply(user) == null) {
            throw new RuntimeException(String.format("The user's %s cannot be null", fieldName));
        }
    });
}

内容的提问来源于stack exchange,提问作者MATEO VALENCIA MINOTA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:15:36