我正在尝试学习Java8。是否可以将下面的方法转换为Java 8 Streams,filterforEach。如果是这样,怎么办?

protected void isValidId(CarModel model, List<String> errors) throws DataAccessException {

    CarStyle[] styles = model.getStyles();

    for(CarStyle style : styles){
        if(!style.isModels()){
            if(style.getStyleId() > 99){
          errors.add(INVALID_ID + ", Id:" + style.getStyleId());

            }
        }
    }
}


我阅读了一些有关Java 8的教程,但不确定如何实现。谢谢。

编辑:我向该方法添加了一个列表。

最佳答案

您嵌套的if语句等于filter。稍后,您可以将过滤后的元素转换为错误字符串,并将其收集到现有集合中:

Arrays.stream(model.getStyles())
  .filter(s -> !s.isModels() && s.getStyleId() > 99)
  .map(s -> String.format("%s, Id:%d", INVALID_ID, s.getStyleId()))
  .forEach(errors::add);


或者...更合理的选择是返回错误列表而不是void

return Arrays.stream(model.getStyles())
  .filter(s -> !s.isModels() && s.getStyleId() > 99)
  .map(s -> String.format("%s, Id:%d", INVALID_ID, s.getStyleId()))
  .collect(Collectors.toList());

07-27 22:17