将增强的循环转换为Java8流,filter-forEach

将增强的循环转换为Java8流,filter-forEach,java,java-8,java-stream,Java,Java 8,Java Stream,我正在努力学习Java8。有没有办法将下面的方法转换为Java8流、过滤器和forEach。如果是,怎么做 protected void isValidId(CarModel model, List<String> errors) throws DataAccessException { CarStyle[] styles = model.getStyles(); for(CarStyle style : styles){ if(!style.is

我正在努力学习Java8。有没有办法将下面的方法转换为Java8流、过滤器和forEach。如果是,怎么做

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

            }
        }
    }
}
我读了一些关于Java8的教程,但不确定如何实现它。谢谢


编辑:我在方法中添加了一个列表。

假设方法调用没有副作用,您不必考虑在for循环中编辑数组,这也不适用于您问题中的方法,您可以像这样重写代码:

protected void isValidId(CarModel model)
{
    CarStyle styles[] = model.getStyles();

    Arrays.stream(styles)
          .filter(style -> !style.isModels() && style.getStyleId() > 99)
          .forEach(style -> {

    });
}
    CarStyle[] styles = model.getStyles();
    return Stream.of(styles)
          .filter(style -> !style.isModels() && style.getStyleId() > 99)
          .map(style -> INVALID_ID.concat(", Id:").concat(style.getStyleId()))
          .collect(Collectors.toList());

假设方法调用没有副作用,您也不会考虑在for循环中编辑数组,因为它也不适用于您问题中的方法,您可以像这样重写代码:

protected void isValidId(CarModel model)
{
    CarStyle styles[] = model.getStyles();

    Arrays.stream(styles)
          .filter(style -> !style.isModels() && style.getStyleId() > 99)
          .forEach(style -> {

    });
}
    CarStyle[] styles = model.getStyles();
    return Stream.of(styles)
          .filter(style -> !style.isModels() && style.getStyleId() > 99)
          .map(style -> INVALID_ID.concat(", Id:").concat(style.getStyleId()))
          .collect(Collectors.toList());

我不知道你的代码的结果应该是什么,所以我假设你只想过滤那些符合条件的车型

你可以这样写:

protected void isValidId(CarModel model)
{
    CarStyle styles[] = model.getStyles();

    Arrays.stream(styles)
          .filter(style -> !style.isModels() && style.getStyleId() > 99)
          .forEach(style -> {

    });
}
    CarStyle[] styles = model.getStyles();
    return Stream.of(styles)
          .filter(style -> !style.isModels() && style.getStyleId() > 99)
          .map(style -> INVALID_ID.concat(", Id:").concat(style.getStyleId()))
          .collect(Collectors.toList());

我不知道你的代码的结果应该是什么,所以我假设你只想过滤那些符合条件的车型

你可以这样写:

protected void isValidId(CarModel model)
{
    CarStyle styles[] = model.getStyles();

    Arrays.stream(styles)
          .filter(style -> !style.isModels() && style.getStyleId() > 99)
          .forEach(style -> {

    });
}
    CarStyle[] styles = model.getStyles();
    return Stream.of(styles)
          .filter(style -> !style.isModels() && style.getStyleId() > 99)
          .map(style -> INVALID_ID.concat(", Id:").concat(style.getStyleId()))
          .collect(Collectors.toList());
嵌套的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);
或者……更合理的选择是返回错误列表,而不是无效:

嵌套的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);
或者……更合理的选择是返回错误列表,而不是无效:

上面的代码片段将打印出满足要求的所有样式

编辑

此代码段将执行与您的代码相同的操作

我向您推荐本教程:

上面的代码片段将打印出满足要求的所有样式

编辑

此代码段将执行与您的代码相同的操作

我向您推荐本教程:

如果您描述了循环应该执行的操作,这会有所帮助-现在它不返回任何内容或对数据执行任何操作,因此很难回答整个代码是什么?if里面是什么?不要告诉我什么都没有,ifs中调用的方法也有副作用!为什么名为isXxx的方法会像预期的那样返回void而不是boolean?到目前为止,您尝试了什么?阅读流文档时,将以下代码转换为Java流API非常容易。粘贴最终结果无助于您学习Java 8。请参阅编辑。我在方法中添加了一个列表您为什么要将错误列表作为参数传递?为什么不直接在那里创建它并返回呢?如果您描述了循环应该做什么,这会有所帮助-现在它不返回任何东西或对数据做任何事情,所以很难回答整个代码是什么?if里面是什么?不要告诉我什么都没有,ifs中调用的方法也有副作用!为什么名为isXxx的方法会像预期的那样返回void而不是boolean?到目前为止,您尝试了什么?阅读流文档时,将以下代码转换为Java流API非常容易。粘贴最终结果无助于您学习Java 8。请参阅编辑。我在方法中添加了一个列表您为什么要将错误列表作为参数传递?为什么不在那里创建它并返回呢?重复的过滤器会减少代码efficient@msrd0不足以关心it@GrzegorzPiwowarek取决于数组的大小,但您可能是对的,重复过滤器会减少代码efficient@msrd0不足以关心it@GrzegorzPiwowarek取决于数组的大小,但也许你是对的——一个供应商返回一个新的、空的适当的产品集合type@piddler这两个选项都有效-此选项稍微好一点-返回新,空的适当的集合type@piddler两个选项都有效-此选项稍微好一点,我们可以将其缩短为array.streammodel.getStyles.filterrible?@piddler是的,我们可以。我们不能将其缩短为array.streammodel.getStyles.filterrible?@piddler是的,我们可以。