2015-07-08 2 views
3

От внешней системы я получаю строковое представление некоторых сокращений, и я должен сделать преобразование (преобразование) в другую строку, например:String to String, используя Spring?

"O" -> Open 
"C" -> Closed 
"E" -> Exit 

Для объекта к объекту преобразования Я использую Spring Пользовательского ПРЕОБРАЗОВАТЕЛЬ

import org.springframework.core.convert.converter.Converter; 
public class Converter<Source, Target> implements Converter<Source, Target> 
public final Target convert(@Nonnull Source source) { 
... 
} 

Но я не могу создать String для преобразования String. Я не хочу использовать только внешние библиотеки сопоставления Spring. Но я не могу этого сделать. Самое простое, что я могу сделать, это переключение

String input = "O"; 
String result = null; 
switch(input){ 
case "O": result ="Open" 
break; 
case "C": result ="Close" 
break; 
.... 

В действительности я должен выполнить более 100 карт. Может ли Spring предложить лучшее решение?

+1

Является ли это отображение фиксированным? – Karthik

+0

Да. Все сопоставления фиксированы, и мы знаем для них. – Xelian

+0

Считаете ли вы использование статического HashMap вместо корпуса коммутатора? – Karthik

ответ

4

Когда у вас нет никакой логики для выполнения в случае выключателя, вы можете использовать статический HashMap<String,String>

static HashMap<String,String> map = new HashMap<>(); 
    static 
    { 
     map.put("O","Open"); 
     map.put("C","Close"); 
     ..................... 

    } 

Вместо переключения регистра просто использовать

 map.get(input); 

Если вы подали в суд Java 8, вы можете даже использовать

map.getOrDefault(input,""); 
+0

Возможно, было бы разумно объявить карту _not_ внутри статического блока инициализатора. – Tom

+0

@ Вы хотите просто удалить статическую или объявить карту вне статики? – Karthik

+0

Переместите строку 'HashMap map = new HashMap <>();' вне статического блока. В настоящее время ваша «карта» привязана к этому блоку, и когда выполнение этого блока завершено, эта карта будет удалена. – Tom