迭代流Java 8时获得错误的索引

时间:2019-06-25 17:34:49

标签: java-8

我们的应用程序部分读取csv文件并将其转换为等效的Java对象的列表。进一步处理如下

List<MyDO> dataList = ...
try{    
       List<MyDO> processedList = dataList
               .stream()
               .filter(...)//some filter condition
               .map(...)//some validation & processing
               .collect(Collectors.toList());  
}catch(Exception e){
  logger.error("Invalid data found at "+i);
}

需要获取索引(i),在该索引中找到无效数据,例如不可解析的int值。我尝试像这样使用IntStream

IntStream.range(0, dataList.size())
        .filter(i -> ...)
        .mapToObj(i -> {
             MyDO myDO = dataList.get(i);
             ...// some error at i
         })
        .collect(toList()); 

但是,不能将错误的i分配给流外部的变量。可以取出并记录该索引吗?

1 个答案:

答案 0 :(得分:0)

只需在专用异常中提供上下文信息即可。

library(shiny)
library(shinyjs)

ui<- fluidPage(
    useShinyjs(),
    tags$form(
        class = "form-horizontal", action="/action_page.php",

        div(id = "div_month_abb",
            class = 'form-group', 
            tags$label(class = 'control-label col-sm-2', `for` = 'month_abb', 'Month (abbr.)'),
            div(
                class = 'col-sm-4', 
                selectInput('month_abb', '', month.abb)
            )
        ), 

        div(id = "div_month_full",
            class = 'form-group', 
            tags$label(class = 'control-label col-sm-2', `for` = 'month_full', 'Month (full)'),
            div(
                class = 'col-sm-4', 
                selectInput('month_full', '', month.name)
            )
        ), 

        checkboxInput('abbr', 'Abbreviated')

    )
)

server<-function(input, output) {

  observe({

       toggle(id = "div_month_abb", condition = input$abbr)

       toggle(id = "div_month_full", condition = !input$abbr)

      })
}


shinyApp(ui,server)

您还可以使用将索引作为var request = service.Files.Delete(fileId); 值的自定义异常类型,以使其更易于处理(以防万一,不仅需要记录日志,还可以执行其他操作)。该异常也可以采用相关的IntStream.range(0, dataList.size()) .filter(i -> ...) .mapToObj(i -> { MyDO myDO = dataList.get(i); try { ...// some error at i } catch(Exception ex) { throw new IllegalStateException("at index "+i, ex); } }) .collect(toList());

通常,在此处使用普通循环可能会更简单:

int

MyDO

获得示例异常处理程序的效果。