IntStream何时实际关闭? SonarQube S2095对IntStream是误报吗?

我使用Java 8流代替许多旧样式for循环来迭代一堆结果并生成摘要统计信息。 例如:

int messages = IntStream.rangeClosed(0, 7).map(ids::get).reduce(Integer::sum).getAsInt(); 

注意:我知道还有其他方法可以进行上面显示的计数。 我这样做是为了说明我的问题。

我正在使用SonarQube 5.3和Java 3.9插件。 在该配置中,上面的代码行违反了squid规则S2095:“资源应该关闭”。 这是我期望看到AutoCloseable(例如,FileInputStream)被打开但从未关闭的结果。

所以这是我的问题:终端操作是否会reduce关闭流? 应该是? 或者这是鱿鱼规则的假阳性?

它没有关闭,因为AutoCloseable接口只能在try-with-resources 。 但是这个关闭操作对于IntStream完全没有必要,因为它在AutoCloseable接口javadoc

但是,当使用支持基于I / O和非I / O的表单的java.util.stream.Stream等工具时,使用非I / O时通常不需要try-with-resources块。基础表格。

所以是的, S2095 IntStream的误报。 希望由SONARJAVA-1478修复