我正在尝试学习 Java 8。有没有办法将下面的方法转换为 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());
关于java - 将增强循环转换为 Java 8 Streams,过滤器 - forEach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45550129/