Как перехватить и изменить данные за исключением произошедшего во время использования потока - PullRequest
0 голосов
/ 01 февраля 2019

В настоящее время я работаю над экспортом CSV.Я получаю заголовок из файла свойств с кодом ниже -

String[] csvHeader = exportables.get(0).getCSVHeaderMap(currentUser).keySet().stream().
map(s ->messageSource.getMessage("report."+s, null, locale)).toArray(String[]::new);

Код выше работает хорошо.Но мне нужно найти способ обработать исключение, а также получить данные из другого файла, если он не найден в файле выше.Я ожидаю использовать несколько ниже код -

try{
    exportables.get(0).getCSVHeaderMap(currentUser).keySet().stream().
    map(s ->messageSource.getMessage("report."+s, null, locale)).toArray(String[]::new);
    }catch(NoSuchMessageException e){
    // code to work over lacking properties 
    }

Я хочу поймать элемент 's' в блоке catch (или другим хорошим способом).Так что я могу получить его из другого файла, а также добавить его возвращение к текущему csvHeader.

1 Ответ

0 голосов
/ 01 февраля 2019

Одним из способов является создание для каждого элемента блока try catch, например:

 exportables.get(0).getCSVHeaderMap(currentUser).keySet().stream().
map(s -> {
            String result;//Put the class to which you map

            try{
                result = messageSource.getMessage("report."+s, null, locale);
              }catch(NoSuchMessageException e){
              // code to work over lacking properties here you have access to s
              }
              return result;
         }
   ).toArray(String[]::new);

Другим решением будет проверка на наличие конкретных проблем, и тогда нет необходимости перехватывать исключения.Например, если s равно нулю, и вы хотите получить данные из другого места:

 exportables.get(0).getCSVHeaderMap(currentUser).keySet().stream().
map(s -> {
            String result;//Put the class to which you map
            if(null == s)// Some condition that you want to check.
            {
                //get info from another place
                //result = ....
            }
            else
            {
                result = messageSource.getMessage("report."+s, null, locale);
            }
            return result;
         }
   ).toArray(String[]::new);
...