根据条件将值放在不同的hashmap中

Put value in different hashmap according to condition

我有下面提到的这 3 个函数,这些函数的唯一区别是不同的 hashmap,我可以将它变成一个函数吗?从 redefineHeaderParameters 我得到了 hashmap 的名称并动态放置键值

public void redefineHeaderParameters(String condition, String parameterName) {
    if (condition.equalsIgnoreCase("invalid")) {
        headerParameters.put(parameterName, RandomStringUtils.randomAlphabetic(6));
        
    } else if (condition.equalsIgnoreCase("incorrect")) {
        headerParameters.put(parameterName, correctParameter.get(parameterName).replaceAll(
                correctParameter.get(parameterName).substring(2, 7), RandomStringUtils.randomAlphabetic(5)));
        
    } else if (condition.equalsIgnoreCase("null")) {
        headerParameters.put(parameterName, null);
        
    } else if (condition.equalsIgnoreCase("expired") || condition.equalsIgnoreCase("expire")) {
        headerParameters.put(parameterName, expiredParameter.get(parameterName));
        
    }
}

public void redefineQueryParameters(String condition, String parameterName) {

    if (condition.equalsIgnoreCase("invalid")) {
        queryParameters.put(parameterName, RandomStringUtils.randomAlphabetic(6));
        
    } else if (condition.equalsIgnoreCase("incorrect")) {
        queryParameters.put(parameterName, correctParameter.get(parameterName).replaceAll(
                correctParameter.get(parameterName).substring(2, 7), RandomStringUtils.randomAlphabetic(5)));
        
    } else if (condition.equalsIgnoreCase("null")) {
        queryParameters.put(parameterName, null);
        System.out.println(queryParameters);

    } else if (condition.equalsIgnoreCase("expired") || condition.equalsIgnoreCase("expire")) {
        queryParameters.put(parameterName, expiredParameter.get(parameterName));
    
    }
}

public void redefineBodyParameters(String condition, String parameterName) {

    if (condition.equalsIgnoreCase("invalid")) {
        bodyParameters.put(parameterName, RandomStringUtils.randomAlphabetic(6));
        
    } else if (condition.equalsIgnoreCase("incorrect")) {
        bodyParameters.put(parameterName, correctParameter.get(parameterName).replaceAll(
                correctParameter.get(parameterName).substring(2, 7), RandomStringUtils.randomAlphabetic(5)));
        
    } else if (condition.equalsIgnoreCase("null")) {
        bodyParameters.put(parameterName, null);
        
    } else if (condition.equalsIgnoreCase("expired") || condition.equalsIgnoreCase("expire")) {
        bodyParameters.put(parameterName, expiredParameter.get(parameterName));
    }
}

正如评论中提到的 tgdavies,您可以将地图传递给方法:

public void redefineParameters(HashMap<String, String> map, String condition, String parameterName) {
    if (condition.equalsIgnoreCase("invalid")) {
        map.put(parameterName, RandomStringUtils.randomAlphabetic(6));

    } else if (condition.equalsIgnoreCase("incorrect")) {
        map.put(parameterName, correctParameter.get(parameterName).replaceAll(
                correctParameter.get(parameterName).substring(2, 7), RandomStringUtils.randomAlphabetic(5)));

    } else if (condition.equalsIgnoreCase("null")) {
        map.put(parameterName, null);

    } else if (condition.equalsIgnoreCase("expired") || condition.equalsIgnoreCase("expire")) {
        map.put(parameterName, expiredParameter.get(parameterName));
    }
}

或者,将通用方法设为私有并命名包装器:

public void redefineHeaderParameters(String condition, String parameterName) {
    redefineParameters(headerParameters, condition, parameterName);
}

public void redefineQueryParameters(String condition, String parameterName) {
    redefineParameters(queryParameters, condition, parameterName);
}

public void redefineBodyParameters(String condition, String parameterName) {
    redefineParameters(bodyParameters, condition, parameterName);
}

private void redefineParameters(Map<String, String> map, String condition, String parameterName) {

    if (condition.equalsIgnoreCase("invalid")) {
        map.put(parameterName, RandomStringUtils.randomAlphabetic(6));

    } else if (condition.equalsIgnoreCase("incorrect")) {
        map.put(parameterName, correctParameter.get(parameterName).replaceAll(
                correctParameter.get(parameterName).substring(2, 7), RandomStringUtils.randomAlphabetic(5)));

    } else if (condition.equalsIgnoreCase("null")) {
        map.put(parameterName, null);

    } else if (condition.equalsIgnoreCase("expired") || condition.equalsIgnoreCase("expire")) {
        map.put(parameterName, expiredParameter.get(parameterName));
    }
}

另一种选择,如果映射不在调用者的范围内,则传递另一个参数以指示它是哪种类型的参数:

public enum ParameterType { HEADER, QUERY, BODY };

public void redefineParameters(ParameterType parameterType, String condition, String parameterName) {
    Map<String, String> map;
    switch (parameterType) {
        case HEADER:
            map = headerParameters;
            break;
        case QUERY:
            map = queryParameters;
            break;
        case BODY:
            map = bodyParameters;
            break;
    }
    if (condition.equalsIgnoreCase("invalid")) {
        map.put(parameterName, RandomStringUtils.randomAlphabetic(6));

    } else if (condition.equalsIgnoreCase("incorrect")) {
        map.put(parameterName, correctParameter.get(parameterName).replaceAll(
                correctParameter.get(parameterName).substring(2, 7), RandomStringUtils.randomAlphabetic(5)));

    } else if (condition.equalsIgnoreCase("null")) {
        map.put(parameterName, null);

    } else if (condition.equalsIgnoreCase("expired") || condition.equalsIgnoreCase("expire")) {
        map.put(parameterName, expiredParameter.get(parameterName));
    }
}