Сначала немного фона:
Когда вы используете case/switch
с String
, это не простая проверка, если / else / равно. Внутри (в отличие от int
типов, например) сначала hashCode
вычисляется для строки, которую вы включаете, и lookupswitch
вызывается для этого.
Если это значение hashCode равно одному из значений, присутствующих в операторах case (это означает, что потенциально эта строка равна той, которую вы ищете), сделайте еще один lookupswitch
для предварительно определенного значения, которое зависит от откуда вы «исходите» (предыдущий поисковый переключатель говорит вам, куда прыгать).
В любом случае, переключение String на самом деле является переключателем поиска, который O(1)
(даже если делать два из них).
Что вы можете сделать, это скрыть эту сложность по той же цене O(1)
через Map
.
Map<String, BiConsumer<HeaderDTO, String>> MAP = Map.of(
"AUS", (x, y) -> x.setAudval(StringUtils.getTrimValueAfterNullCheck(y))
// all other cases
)
и затем просто имея эту карту, сделайте:
private static void setHeader(String headertableField, String headerValue){
MAP.get(headertableField).accept(headerDTO, headerValue);
}