#java #hashmap
#java #hashmap
Вопрос:
Я использую многоразовый метод для сопоставления двух кодов, когда мы получаем ‘a’, мы хотим использовать ’01’ в нашем коде. Это статический метод, поэтому правильно ли, что он создается только один раз, и мы повторно используем метод, или это плохая практика, и она излишне обрабатывается каждый раз, когда мы вызываем этот метод? это хорошая практика или я должен создавать эту карту где-то еще и просто использовать метод для возврата значений из нее?
private static String mapStatus(String duckStatus){
Map<String, String> statusMap = new HashMap<String,String>();
statusMap.put("a","01");
statusMap.put("b","02");
statusMap.put("c","03");
if (!statusMap.containsKey(duckStatus)){
throw new NullPointerException("Invalid Code does not map to status code");
}
return statusMap.get(duckStatus);
}
Комментарии:
1. Вероятно, для обсуждения, но
public enum DuckStatus{}
может быть хорошим выбором для постоянного преобразования? Если только эти значения на самом деле не поступают откуда-то динамично.2. Интересно, да, теперь, когда вы говорите, что перечисление, вероятно, имело бы больше смысла
3. Если значения постоянны, и вы хотите сохранить такие вещи, как
DuckStatus status;
и использовать любое из значений. Опять же, ваш пример на самом деле не объяснил, КАК он использовался, только то, что вам было нужно, следовательно, «для обсуждения»4. Итак, есть 2 разных приложения, которые используют разные коды для статуса, они оба являются константами, когда одно приложение вызывает это приложение, мы хотим сопоставить коды из приложения 1, которые будут использоваться здесь.
5. Оба приложения используют общий код для преобразования статуса ‘? Я бы все равно, вероятно, сделал это, чтобы присвоить каждому статусу имя и два возможных значения. Каждое приложение может определить, какое из двух значений им нужно проанализировать / отправить.
Ответ №1:
Согласно комментариям, enum
может быть хорошим выбором, но опять же, как уже упоминалось @kendavidson, это спорно. С точки зрения производительности я не вижу большой разницы между enum
и HashMap
здесь, но, на мой взгляд, HashMap
это будет более уместно и обеспечит лучшую читаемость. Единственное отличие, которое я предлагаю в написанном вами коде, заключается в том, чтобы сделать HashMap
статически заполненным, чтобы HashMap
избежать времени накопления каждый раз, когда вы хотите выполнить поиск statusMap
всякий раз, когда выполняется вызов mapStatus
метода. Измененный код будет выглядеть следующим образом:
public class Test {
private static final Map<String, String> STATUS_MAP = new HashMap<>();
static {
// Mapping the status values in Duck Creek to the Values used here
STATUS_MAP.put("a", "01");
STATUS_MAP.put("b", "02");
STATUS_MAP.put("c", "03");
}
private static String mapStatus(String duckStatus) {
if (!STATUS_MAP.containsKey(duckStatus)) {
throw new IllegalArgumentException("Invalid code " duckStatus " does not map to status code");
}
return STATUS_MAP.get(duckStatus);
}
}
Примечание:
- Не уверен, что вы хотели проверить
duckStatus
вduckCreekToEDMStatusMapper
илиSTATUS_MAP
, я используюSTATUS_MAP
- Вместо того, чтобы
NullPointerException
лучше использоватьIllegalArgumentException
, как это уместно здесь.
Комментарии:
1. Да, предполагалось использовать карту состояния, которая была проблемой копирования и вставки, был вопрос рефакторинга для stack overflow, чтобы не использовать мои фактические имена переменных и забыл изменить это. Отличный ответ именно то, что я искал!