Поместите значение в другую хэш-карту в соответствии с условием

У меня есть эти 3 функции, упомянутые ниже, единственная разница в этих функциях - это разные хэш-карты, могу ли я сделать ее одной функцией, и из redefineHeaderParameters я получил имя хэш-карты и динамически поставил ключ-значение

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));
    }
}

Да, просто используйте одну функцию и добавьте HashMap в качестве другого параметра.

tgdavies 22.12.2020 12:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как упоминалось в комментарии 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));
    }
}

Другие вопросы по теме

Похожие вопросы

Автоматический экспорт диапазонов Spring Cloud Sleuth с помощью клиентской библиотеки Azure Monitor OpenTelemetry Exporter для Java
Mockito: как смоделировать специальный DI Spring, чтобы у введенного объекта не было конструктора без аргументов
Почему для одной Java-программы в Windows 10 работают два двоичных файла платформы Java?
Проблема с адаптером Android Recyclerview при анализе JSON с использованием залпа
Как уменьшить аудиоданные, записанные с кодировкой ENCODING_PCM_16BIT и частотой дискретизации 8000 Гц?
Отправка типа контента поставщика с помощью jMeter вызывает исключение IllegalArgumentException
Org.openqa.selenium.NoSuchFrameException: невозможно найти фрейм при поиске элемента в модальном диалоговом окне с использованием Selenium и Java
Идентификатор класса без риска целочисленного переполнения
Не удается разрешить PowerMockito, но может PowerMockRunner
Не удалось преобразовать значение типа «java.lang.String» в требуемый тип «long»; Для входной строки: "{id}"