Back to Intellij Community

ReplaceInefficientStreamCount

java/java-impl/resources/inspectionDescriptions/ReplaceInefficientStreamCount.html

2025.3-rc-21.1 KB
Original Source

Reports Stream API call chains ending with a count() operation, that are optimizable.

The following call chains can be replaced by this inspection:

  • Collection.stream().count()Collection.size(). In Java 8 Collection.stream().count() actually iterates over the collection elements to count them, while Collection.size() is much faster for most of the collections.
  • Stream.flatMap(Collection::stream).count()Stream.mapToLong(Collection::size).sum(). Similarly, there's no need to iterate over all the nested collections. Instead, their sizes could be summed up.
  • Stream.filter(o -> ...).count() > 0Stream.anyMatch(o -> ...). Unlike the original call, anyMatch() may stop the computation as soon as a matching element is found.
  • Stream.filter(o -> ...).count() == 0Stream.noneMatch(o -> ...). Similar to the above.

Note that if the replacement involves a short-circuiting operation like anyMatch(), there could be a visible behavior change, if the intermediate stream operations produce side effects. In general, side effects should be avoided in Stream API calls.