【发布时间】:2016-05-26 17:19:29
【问题描述】:
我在 Sonar 上收到以下警告:
用方法引用替换这个 lambda
代码是:
protected List<Test> getTests(List<String> testIds) {
List<Test> tests = new ArrayList<>();
if (!CollectionUtils.isEmpty(testIds)) {
testIds.stream().forEach(eachTestId -> tests.add(getTest(eachTestId)));
}
return tests;
}
我怎样才能克服这个警告?
【问题讨论】:
-
对于这个明显错误的警告我无话可说,但整个 Stream 的使用与该 API 的目的背道而驰。如果您只想通过
forEach执行操作,只需在集合上调用forEach。在任何一种情况下,您都不需要检查空集合。如果您只使用CollectionUtils.isEmpty进行null测试,则应改为执行干净的null检查。但实际上,您想使用return testIds.stream().map(id -> getTest(id)) .collect(Collectors.toList());而不是使用forEach。 那么你确实可以使用getTest的方法参考 -
作为 SonarQube 的 java 分析器的开发人员:警告确实是错误的,但您能否准确说明您使用的是哪个版本的 java 分析器?因为这很可能在最新版本中得到修复?