将增强的循环转换为Java8流,filter-forEach
我正在努力学习Java8。有没有办法将下面的方法转换为Java8流、过滤器和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
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是的,我们可以。