流使用期间如何捕获和修改异常数据

时间:2019-02-01 13:01:46

标签: java error-handling java-8 stream java-stream

我目前正在处理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 
    }

我想在catch块中捕捉's'元素(或以其他好的方式)。这样我就可以从另一个文件中获取它,并将其返回值添加到当前的csvHeader中。

1 个答案:

答案 0 :(得分:3)

一种方法是为每个元素设置一个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为null,那么您想从另一个地方获取数据:

 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);