我正在尝试学习Java8。是否可以将下面的方法转换为Java 8 Streams,filter
和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());
}
}
}
}
我阅读了一些有关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());