Java Logi c для обновления строки в зависимости от полученного кода - PullRequest
1 голос
/ 23 января 2020

У меня есть сценарий, в котором мы получаем машинный код с одной машины, который необходимо отправить на другую, но путем преобразования его в строку, которую понимает другая машина, есть сценарий ios

**if code is 'AGO PRF' then convert to 'AGO.P'
if code is 'HUSQ A' then convert to 'HUSQ.A'
if code is 'AIK B' then convert to 'AIK.B'
if code is 'ALUS WS' then convert to 'ALUS.WS'
if code is 'VST WSA' then convert to 'VST.WSA'
if code is 'SAB CL' then convert to 'SAB.CL'
if code is 'SPR WSB' then convert to 'NSPR.WSB'
if code is 'AXS PRD CL' then change it to 'AXS.PCL'
if code is 'CTEST RT' then convert to 'CTEST.R'
if code is 'ALUS U' then convert to 'ALUS.U'
if code is 'SFUN WI' then convert to 'SFUN.WI'
if code is 'RQI RT WI' then convert to 'RQI.RTWI'
if code is 'ECA WS WI' then change it to 'ECA.WSWI'.** 

I использовал MAP для ввода этих значений в качестве ключей и выдачи выходных данных. но я хочу знать, может ли быть более общее c решение для этого

1 Ответ

1 голос
/ 23 января 2020

Если не существует ни правила, ни регулярности замены String (я не нахожу ни одного), то вам нужна либо таблица сопоставления, хранящаяся в БД, либо состояние c Map<String, String> этих констант:

  • Я рекомендую Map в случае небольшого количества из них, и они не будут часто меняться.
  • Я рекомендую читать из БД в случае их большого количества. Это также позволяет вам изменять отображение при запуске без необходимости создавать и повторно развертывать все приложение.

С точки зрения структуры данных, на основе словаря будет лучшим способом go - Map<String, String>. Он не позволяет хранить дублированные ключи и прост в использовании для преобразования:

List<String> listOfStringsToBeReplaced = loadFromSomewhere();
Map<String, String> map = loadFromDb();

List<String> listWithReplacedStrnigs = listOfStringsToBeReplaced.stream()
    .map(string -> map.getOrDefault(string, string))
    .collect(Collectors.toList());

Я использую Map::getOrDefault, чтобы либо заменить значение, либо сохранить его как есть, если сопоставление не найдено.

...